[Pkg-golang-commits] [golang] 19/27: Imported Upstream version 1.6~rc1

Michael Hudson-Doyle mwhudson-guest at moszumanska.debian.org
Tue Mar 1 02:57:42 UTC 2016


This is an automated email from the git hooks/post-receive script.

mwhudson-guest pushed a commit to branch gbp
in repository golang.

commit 397be82cf9736186e6fc07420f51431087c21a60
Author: Michael Hudson-Doyle <michael.hudson at canonical.com>
Date:   Fri Feb 12 10:40:21 2016 +1300

    Imported Upstream version 1.6~rc1
---
 VERSION                                            |     2 +-
 doc/asm.html                                       |     7 +
 doc/go1.6.html                                     |    68 +-
 doc/help.html                                      |    68 +-
 doc/install-source.html                            |    19 +-
 lib/time/update.bash                               |     5 +-
 lib/time/zoneinfo.zip                              |   Bin 359824 -> 360617 bytes
 misc/cgo/errors/ptr.go                             |   104 +-
 misc/cgo/test/sigaltstack.go                       |     4 +-
 misc/cgo/testcarchive/test.bash                    |    18 +
 misc/cgo/testshared/shared_test.go                 |    12 +
 misc/cgo/testshared/src/explicit/explicit.go       |     9 +
 misc/cgo/testshared/src/implicit/implicit.go       |     5 +
 misc/cgo/testshared/src/implicitcmd/implicitcmd.go |    10 +
 misc/nacl/testzip.proto                            |     3 -
 src/archive/zip/example_test.go                    |    17 +-
 src/archive/zip/reader.go                          |     2 -
 src/archive/zip/register.go                        |    27 +-
 src/bootstrap.bash                                 |     2 +-
 src/buildall.bash                                  |     2 +-
 src/cmd/asm/internal/arch/arch.go                  |     2 +-
 src/cmd/asm/internal/arch/arm.go                   |     1 +
 src/cmd/asm/internal/asm/asm.go                    |     2 +-
 src/cmd/asm/internal/asm/endtoend_test.go          |   378 +-
 src/cmd/asm/internal/asm/parse.go                  |     3 +-
 src/cmd/asm/internal/asm/testdata/386.out          |    49 -
 src/cmd/asm/internal/asm/testdata/386.s            |    37 +-
 src/cmd/asm/internal/asm/testdata/amd64.out        |    57 -
 src/cmd/asm/internal/asm/testdata/amd64.s          |    88 +-
 src/cmd/asm/internal/asm/testdata/amd64enc.s       | 10682 +++++++++++++++++++
 src/cmd/asm/internal/asm/testdata/amd64error.s     |     7 +
 src/cmd/asm/internal/asm/testdata/arm.out          |    60 -
 src/cmd/asm/internal/asm/testdata/arm.s            |    47 +-
 src/cmd/asm/internal/asm/testdata/arm64.out        |    55 -
 src/cmd/asm/internal/asm/testdata/arm64.s          |    23 +-
 src/cmd/asm/internal/asm/testdata/mips64.out       |    99 -
 src/cmd/asm/internal/asm/testdata/mips64.s         |    41 +-
 src/cmd/asm/internal/asm/testdata/ppc64.out        |   114 -
 src/cmd/asm/internal/asm/testdata/ppc64.s          |    78 +-
 src/cmd/asm/internal/flags/flags.go                |     1 +
 src/cmd/asm/main.go                                |    13 +-
 src/cmd/compile/internal/amd64/prog.go             |     1 +
 src/cmd/compile/internal/arm/peep.go               |     1 +
 src/cmd/compile/internal/arm/prog.go               |     1 +
 src/cmd/compile/internal/arm64/peep.go             |     1 +
 src/cmd/compile/internal/arm64/prog.go             |     1 +
 src/cmd/compile/internal/big/int.go                |     2 +-
 src/cmd/compile/internal/big/int_test.go           |    27 +-
 src/cmd/compile/internal/big/nat.go                |    58 +-
 src/cmd/compile/internal/big/nat_test.go           |     6 +
 src/cmd/compile/internal/gc/esc.go                 |    30 +
 src/cmd/compile/internal/gc/fmt.go                 |     2 +-
 src/cmd/compile/internal/gc/gen.go                 |     3 +
 src/cmd/compile/internal/gc/gsubr.go               |     2 +-
 src/cmd/compile/internal/gc/lex.go                 |    19 +-
 src/cmd/compile/internal/gc/opnames.go             |     1 +
 src/cmd/compile/internal/gc/order.go               |    30 +-
 src/cmd/compile/internal/gc/parser.go              |     7 +-
 src/cmd/compile/internal/gc/pgen.go                |    14 +-
 src/cmd/compile/internal/gc/plive.go               |     2 +-
 src/cmd/compile/internal/gc/racewalk.go            |     2 +-
 src/cmd/compile/internal/gc/reg.go                 |     3 +
 src/cmd/compile/internal/gc/syntax.go              |     2 +
 src/cmd/compile/internal/gc/typecheck.go           |     3 +-
 src/cmd/compile/internal/gc/walk.go                |     3 +-
 src/cmd/compile/internal/mips64/peep.go            |     1 +
 src/cmd/compile/internal/mips64/prog.go            |     1 +
 src/cmd/compile/internal/ppc64/peep.go             |     1 +
 src/cmd/compile/internal/ppc64/prog.go             |     1 +
 src/cmd/compile/internal/x86/prog.go               |     1 +
 src/cmd/dist/test.go                               |     6 +-
 src/cmd/go/alldocs.go                              |     8 +
 src/cmd/go/build.go                                |     7 +-
 src/cmd/go/go_test.go                              |    48 +-
 src/cmd/go/list.go                                 |     8 +
 src/cmd/go/main.go                                 |     5 +-
 src/cmd/go/pkg.go                                  |    48 +-
 src/cmd/go/run.go                                  |    14 +-
 src/cmd/go/testdata/src/run/bad.go                 |     5 +
 src/cmd/go/testdata/src/run/good.go                |     5 +
 src/cmd/go/testdata/src/run/internal/internal.go   |     1 +
 .../src/run/subdir/internal/private/private.go     |     1 +
 src/cmd/go/testdata/src/vend/dir1/dir1.go          |     1 +
 src/cmd/go/testdata/src/vend/hello/hello_test.go   |     2 +-
 src/cmd/go/testdata/src/vend/hello/hellox_test.go  |     2 +-
 .../src/vend/vendor/vend/dir1/dir2/dir2.go         |     1 +
 src/cmd/go/testdata/src/vend/x/x.go                |     2 +
 src/cmd/go/vcs_test.go                             |     4 +-
 src/cmd/go/vendor_test.go                          |    12 +-
 src/cmd/internal/obj/arm/anames5.go                |     1 +
 src/cmd/internal/obj/arm/asm5.go                   |    10 +-
 src/cmd/internal/obj/arm64/a.out.go                |     7 -
 src/cmd/internal/obj/arm64/anames.go               |     7 -
 src/cmd/internal/obj/arm64/asm7.go                 |    15 +-
 src/cmd/internal/obj/link.go                       |    15 +-
 src/cmd/internal/obj/mips/a.out.go                 |     6 +-
 src/cmd/internal/obj/mips/list0.go                 |     2 +-
 src/cmd/internal/obj/objfile.go                    |    36 +-
 src/cmd/internal/obj/util.go                       |     5 +-
 src/cmd/internal/obj/x86/a.out.go                  |    93 +-
 src/cmd/internal/obj/x86/anames.go                 |    76 +-
 src/cmd/internal/obj/x86/asm6.go                   |   473 +-
 src/cmd/internal/obj/x86/list6.go                  |    16 +
 src/cmd/internal/obj/x86/obj6_test.go              |     7 +
 src/cmd/link/doc.go                                |     3 +
 src/cmd/link/internal/arm/asm.go                   |    16 +-
 src/cmd/link/internal/ld/elf.go                    |    30 +-
 src/cmd/link/internal/ld/lib.go                    |    41 +-
 src/cmd/link/internal/ld/pobj.go                   |     1 +
 src/cmd/newlink/auto.go                            |   117 -
 src/cmd/newlink/auto_test.go                       |    72 -
 src/cmd/newlink/dead.go                            |    74 -
 src/cmd/newlink/dead_test.go                       |    97 -
 src/cmd/newlink/debug.go                           |    11 -
 src/cmd/newlink/hex_test.go                        |    74 -
 src/cmd/newlink/layout.go                          |   180 -
 src/cmd/newlink/layout_test.go                     |    45 -
 src/cmd/newlink/link_test.go                       |    35 -
 src/cmd/newlink/load.go                            |   108 -
 src/cmd/newlink/macho.go                           |   380 -
 src/cmd/newlink/macho_test.go                      |   407 -
 src/cmd/newlink/main.go                            |     9 -
 src/cmd/newlink/pclntab.go                         |   480 -
 src/cmd/newlink/pclntab_test.go                    |   340 -
 src/cmd/newlink/prog.go                            |   220 -
 src/cmd/newlink/prog_test.go                       |   163 -
 src/cmd/newlink/runtime.go                         |    28 -
 src/cmd/newlink/scan.go                            |   187 -
 src/cmd/newlink/testdata/Makefile                  |    15 -
 src/cmd/newlink/testdata/autosection.6             |   Bin 936 -> 0 bytes
 src/cmd/newlink/testdata/autosection.s             |    60 -
 src/cmd/newlink/testdata/autoweak.6                |   Bin 385 -> 0 bytes
 src/cmd/newlink/testdata/autoweak.s                |    30 -
 src/cmd/newlink/testdata/dead.6                    |   Bin 848 -> 0 bytes
 src/cmd/newlink/testdata/dead.s                    |    48 -
 src/cmd/newlink/testdata/genpcln.go                |   112 -
 src/cmd/newlink/testdata/hello.6                   |   Bin 228 -> 0 bytes
 src/cmd/newlink/testdata/hello.s                   |    15 -
 src/cmd/newlink/testdata/layout.6                  |   Bin 395 -> 0 bytes
 src/cmd/newlink/testdata/layout.s                  |    29 -
 src/cmd/newlink/testdata/link.hello.darwin.amd64   |    55 -
 src/cmd/newlink/testdata/macho.amd64.exit9         |    24 -
 src/cmd/newlink/testdata/macho.amd64.hello         |    39 -
 src/cmd/newlink/testdata/macho.amd64.helloro       |    34 -
 src/cmd/newlink/testdata/pclntab.6                 |   Bin 3803 -> 0 bytes
 src/cmd/newlink/testdata/pclntab.s                 |  1751 ---
 src/cmd/newlink/util.go                            |    11 -
 src/cmd/newlink/write.go                           |    14 -
 src/crypto/cipher/example_test.go                  |    52 +
 src/crypto/crypto.go                               |     8 +-
 src/crypto/rsa/example_test.go                     |   169 +
 src/crypto/rsa/pkcs1v15.go                         |    23 +
 src/crypto/rsa/rsa.go                              |    41 +-
 src/crypto/tls/tls.go                              |     7 +-
 src/database/sql/convert.go                        |    31 +-
 src/database/sql/convert_test.go                   |    23 +-
 src/database/sql/sql.go                            |    63 +-
 src/debug/dwarf/testdata/cycle.c                   |     7 +
 src/debug/dwarf/testdata/cycle.elf                 |   Bin 0 -> 2624 bytes
 src/debug/dwarf/type.go                            |    34 +-
 src/debug/dwarf/type_test.go                       |    34 +
 src/debug/dwarf/typeunit.go                        |     2 +-
 src/encoding/xml/xml.go                            |     3 +-
 src/go/build/build.go                              |    16 +-
 src/go/build/build_test.go                         |    19 +
 src/go/build/deps_test.go                          |     2 +-
 .../golang.org/x/net/http2/hpack/encode.go         |     0
 .../golang.org/x/net/http2/hpack/encode_test.go    |     0
 .../golang.org/x/net/http2/hpack/hpack.go          |     0
 .../golang.org/x/net/http2/hpack/hpack_test.go     |     0
 .../golang.org/x/net/http2/hpack/huffman.go        |     0
 .../golang.org/x/net/http2/hpack/tables.go         |     0
 src/net/dnsclient_unix_test.go                     |     2 +-
 src/net/http/client.go                             |     1 +
 src/net/http/client_test.go                        |    18 +-
 src/net/http/clientserver_test.go                  |   195 +-
 src/net/http/fs.go                                 |    29 +
 src/net/http/fs_test.go                            |    31 +
 src/net/http/h2_bundle.go                          |   498 +-
 src/net/http/httputil/dump.go                      |    29 +-
 src/net/http/internal/chunked.go                   |     7 +-
 src/net/http/internal/chunked_test.go              |    38 +-
 src/net/http/request.go                            |     4 +-
 src/net/http/response_test.go                      |     2 +-
 src/net/http/serve_test.go                         |     4 +-
 src/net/http/server.go                             |    27 +-
 src/net/http/transport.go                          |    28 +-
 src/net/lookup_test.go                             |    15 +-
 src/net/net_windows_test.go                        |    13 +
 src/net/url/url.go                                 |     3 +-
 src/net/url/url_test.go                            |    11 +
 src/runtime/asm_amd64.s                            |    48 +-
 src/runtime/asm_arm.s                              |     4 +
 src/runtime/cgo/gcc_android.c                      |     2 +
 src/runtime/cgo/gcc_android_386.c                  |     2 +
 src/runtime/cgo/gcc_android_amd64.c                |     2 +
 src/runtime/cgo/gcc_android_arm.c                  |     2 +
 src/runtime/cgo/gcc_android_arm64.c                |     2 +
 src/runtime/cgo/gcc_darwin_386.c                   |     2 +
 src/runtime/cgo/gcc_darwin_amd64.c                 |     2 +
 src/runtime/cgo/gcc_darwin_arm.c                   |     2 +
 src/runtime/cgo/gcc_darwin_arm64.c                 |     2 +
 src/runtime/cgo/gcc_dragonfly_amd64.c              |    14 +
 src/runtime/cgo/gcc_fatalf.c                       |     2 +
 src/runtime/cgo/gcc_freebsd_386.c                  |     2 +
 src/runtime/cgo/gcc_freebsd_amd64.c                |     2 +
 src/runtime/cgo/gcc_freebsd_arm.c                  |     2 +
 src/runtime/cgo/gcc_libinit.c                      |     1 +
 src/runtime/cgo/gcc_libinit_linux_ppc64x.c         |     2 +
 src/runtime/cgo/gcc_libinit_openbsd.c              |     2 +
 src/runtime/cgo/gcc_libinit_windows.c              |     2 +
 src/runtime/cgo/gcc_linux_386.c                    |     2 +
 src/runtime/cgo/gcc_linux_amd64.c                  |     2 +
 src/runtime/cgo/gcc_linux_arm.c                    |     2 +
 src/runtime/cgo/gcc_linux_arm64.c                  |     2 +
 src/runtime/cgo/gcc_linux_ppc64x.c                 |     2 +
 src/runtime/cgo/gcc_mmap.c                         |     2 +
 src/runtime/cgo/gcc_netbsd_386.c                   |    14 +
 src/runtime/cgo/gcc_netbsd_amd64.c                 |    14 +
 src/runtime/cgo/gcc_netbsd_arm.c                   |    14 +
 src/runtime/cgo/gcc_openbsd_386.c                  |     2 +
 src/runtime/cgo/gcc_openbsd_amd64.c                |     2 +
 src/runtime/cgo/gcc_setenv.c                       |     1 +
 src/runtime/cgo/gcc_signal_darwin_armx.c           |     2 +
 src/runtime/cgo/gcc_signal_darwin_lldb.c           |     2 +
 src/runtime/cgo/gcc_solaris_amd64.c                |     2 +
 src/runtime/cgo/gcc_util.c                         |     2 +
 src/runtime/cgo/gcc_windows_386.c                  |     2 +
 src/runtime/cgo/gcc_windows_amd64.c                |     2 +
 src/runtime/cgocall.go                             |     8 +
 src/runtime/crash_cgo_test.go                      |     4 +
 src/runtime/crash_unix_test.go                     |     4 +
 src/runtime/export_test.go                         |     8 +
 src/runtime/futex_test.go                          |    25 +-
 src/runtime/heapdump.go                            |     2 +-
 src/runtime/malloc.go                              |     6 +-
 src/runtime/memclr_amd64.s                         |    36 +-
 src/runtime/mgc.go                                 |    98 +-
 src/runtime/mgcmark.go                             |     3 +-
 src/runtime/mprof.go                               |    55 +-
 src/runtime/os1_darwin.go                          |    37 +-
 src/runtime/os1_dragonfly.go                       |    32 +-
 src/runtime/os1_freebsd.go                         |     4 +-
 src/runtime/os1_linux.go                           |     5 +-
 src/runtime/os1_nacl.go                            |     2 +-
 src/runtime/os1_netbsd.go                          |    46 +-
 src/runtime/os1_openbsd.go                         |     4 +-
 src/runtime/os1_plan9.go                           |     2 +-
 src/runtime/os1_windows.go                         |     2 +-
 src/runtime/os2_dragonfly.go                       |     2 +-
 src/runtime/os3_solaris.go                         |     4 +-
 src/runtime/pprof/pprof.go                         |     8 +
 src/runtime/pprof/pprof_test.go                    |   124 +-
 src/runtime/proc.go                                |    26 +-
 src/runtime/proc_test.go                           |    23 +-
 src/runtime/race/output_test.go                    |     5 +-
 src/runtime/race/race_test.go                      |    15 +-
 src/runtime/race/testdata/issue12225_test.go       |     7 +
 src/runtime/runtime2.go                            |     2 +-
 src/runtime/runtime_test.go                        |    19 +
 src/runtime/signal_darwin_arm64.go                 |     1 +
 src/runtime/sys_dragonfly_amd64.s                  |    12 +
 src/runtime/sys_netbsd_amd64.s                     |     4 +-
 src/runtime/testdata/testprogcgo/dropm.go          |     2 +
 src/runtime/trace.go                               |     7 +-
 src/syscall/syscall.go                             |     3 +
 src/text/template/doc.go                           |     6 +-
 src/time/zoneinfo.go                               |     2 +-
 src/unsafe/unsafe.go                               |   166 +-
 src/vendor/README                                  |     8 +
 test/fixedbugs/issue14006.go                       |    64 +
 test/fixedbugs/issue14010.go                       |    15 +
 test/live_syscall.go                               |    28 +
 273 files changed, 14661 insertions(+), 6685 deletions(-)

diff --git a/VERSION b/VERSION
index 397eab2..c9b2fc0 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-go1.6beta2
\ No newline at end of file
+go1.6rc1
\ No newline at end of file
diff --git a/doc/asm.html b/doc/asm.html
index 3459033..2af2005 100644
--- a/doc/asm.html
+++ b/doc/asm.html
@@ -510,6 +510,13 @@ the stack pointer may change during any function call:
 even pointers to stack data must not be kept in local variables.
 </p>
 
+<p>
+Assembly functions should always be given Go prototypes,
+both to provide pointer information for the arguments and results
+and to let <code>go</code> <code>vet</code> check that
+the offsets being used to access them are correct.
+</p>
+
 <h2 id="architectures">Architecture-specific details</h2>
 
 <p>
diff --git a/doc/go1.6.html b/doc/go1.6.html
index c88271b..46a8f65 100644
--- a/doc/go1.6.html
+++ b/doc/go1.6.html
@@ -118,10 +118,10 @@ instead of generated from <a href="/cmd/yacc/">yacc</a>.
 </p>
 
 <p>
-The compiler, linker, and <code>go</code> command have new flag <code>-msan</code>,
+The compiler, linker, and <code>go</code> command have a new flag <code>-msan</code>,
 analogous to <code>-race</code> and only available on linux/amd64,
 that enables interoperation with the <a href="http://clang.llvm.org/docs/MemorySanitizer.html">Clang MemorySanitizer</a>.
-Such interoperation useful mainly for testing a program containing suspect C or C++ code.
+Such interoperation is useful mainly for testing a program containing suspect C or C++ code.
 </p>
 
 <p>
@@ -341,6 +341,19 @@ and changing the global timer resolution caused problems on some systems,
 so the call has been removed.
 </p>
 
+<p>
+When using <code>-buildmode=c-archive</code> or
+<code>-buildmode=c-shared</code> to build an archive or a shared
+library, the handling of signals has changed.
+In Go 1.5 the archive or shared library would install a signal handler
+for most signals.
+In Go 1.6 it will only install a signal handler for the
+synchronous signals needed to handle run-time panics in Go code:
+SIGBUS, SIGFPE, SIGSEGV.
+See the <a href="/pkg/os/signal">os/signal</a> package for more
+details.
+</p>
+
 <h3 id="reflect">Reflect</h3>
 
 <p>
@@ -472,6 +485,16 @@ and <code>"page"</code> blocks to reuse the formatting for another page.
 <ul>
 
 <li>
+The <a href="/pkg/archive/tar/"><code>archive/tar</code></a> package's
+implementation corrects many bugs in rare corner cases of the file format.
+One visible change is that the
+<a href="/pkg/archive/tar/#Reader"><code>Reader</code></a> type's
+<a href="/pkg/archive/tar/#Reader.Read"><code>Read</code></a> method
+now presents the content of special file types as being empty,
+returning <code>io.EOF</code> immediately.
+</li>
+
+<li>
 In the <a href="/pkg/archive/zip/"><code>archive/zip</code></a> package, the
 <a href="/pkg/archive/zip/#Reader"><code>Reader</code></a> type now has a
 <a href="/pkg/archive/zip/#Reader.RegisterDecompressor"><code>RegisterDecompressor</code></a> method,
@@ -578,7 +601,7 @@ Also in the <a href="/pkg/encoding/asn1/"><code>encoding/asn1</code></a> package
 The <a href="/pkg/encoding/base64"><code>encoding/base64</code></a> package's
 <a href="/pkg/encoding/base64/#Decoder"><code>Decoder</code></a> has been fixed
 to process the final bytes of its input. Previously it processed as many four-byte tokens as
-possible but ignore the remainder, up to three bytes.
+possible but ignored the remainder, up to three bytes.
 The <code>Decoder</code> therefore now handles inputs in unpadded encodings (like
 <a href="/pkg/encoding/base64/#RawURLEncoding">RawURLEncoding</a>) correctly,
 but it also rejects inputs in padded encodings that are truncated or end with invalid bytes,
@@ -621,17 +644,17 @@ In previous releases, the argument to <code>*</code> was required to have type <
 Also in the <a href="/pkg/fmt/"><code>fmt</code></a> package,
 <a href="/pkg/fmt/#Scanf"><code>Scanf</code></a> can now scan hexadecimal strings using %X, as an alias for %x.
 Both formats accept any mix of upper- and lower-case hexadecimal.
-<a href="golang.org/x/13585">TODO: Keep?</a>
+<a href="https://golang.org/issues/13585">TODO: Keep?</a>
 </li>
 
 <li>
 The <a href="/pkg/image/"><code>image</code></a>
 and
-The <a href="/pkg/image/color/"><code>image/color</code></a> packages
+<a href="/pkg/image/color/"><code>image/color</code></a> packages
 add
 <a href="/pkg/image/#NYCbCrA"><code>NYCbCrA</code></a>
 and
-<a href="/pkg/color/#NYCbCrA"><code>NYCbCrA</code></a>
+<a href="/pkg/image/color/#NYCbCrA"><code>NYCbCrA</code></a>
 types, to support Y'CbCr images with non-premultiplied alpha.
 </li>
 
@@ -715,22 +738,31 @@ This is arguably a mistake but is not yet fixed. See https://golang.org/issue/13
 The <a href="/pkg/net/http/"><code>net/http</code></a> package has
 a number of minor additions beyond the HTTP/2 support already discussed.
 First, the
-<a href="/pkg/http/#FileServer"><code>FileServer</code></a> now sorts its generated directory listings by file name.
+<a href="/pkg/net/http/#FileServer"><code>FileServer</code></a> now sorts its generated directory listings by file name.
 Second, the
-<a href="/pkg/http/#Client"><code>Client</code></a> now allows user code to set the
+<a href="/pkg/net/http/#ServeFile"><code>ServeFile</code></a> function now refuses to serve a result
+if the request's URL path contains “..” (dot-dot) as a path element.
+Programs should typically use <code>FileServer</code> and 
+<a href="/pkg/net/http/#Dir"><code>Dir</code></a>
+instead of calling <code>ServeFile</code> directly.
+Programs that need to serve file content in response to requests for URLs containing dot-dot can 
+still call <a href="/pkg/net/http/#ServeContent"><code>ServeContent</code></a>.
+Third, the
+<a href="/pkg/net/http/#Client"><code>Client</code></a> now allows user code to set the
 <code>Expect:</code> <code>100-continue</code> header (see
-<a href="/pkg/http/#Transport"><code>Transport.ExpectContinueTimeout</code></a>).
-Third, there are
-<a href="/pkg/net/http/#pkg-constants">four new error codes</a> from RFC 6585:
+<a href="/pkg/net/http/#Transport"><code>Transport.ExpectContinueTimeout</code></a>).
+Fourth, there are
+<a href="/pkg/net/http/#pkg-constants">five new error codes</a> from RFC 6585:
 <code>StatusPreconditionRequired</code> (428),
 <code>StatusTooManyRequests</code> (429),
 <code>StatusRequestHeaderFieldsTooLarge</code> (431),
+<code>StatusUnavailableForLegalReasons</code> (451)),
 and
 <code>StatusNetworkAuthenticationRequired</code> (511).
-Fourth, the implementation and documentation of
-<a href="/pkg/http/#CloseNotifier"><code>CloseNotifier</code></a>
+Fifth, the implementation and documentation of
+<a href="/pkg/net/http/#CloseNotifier"><code>CloseNotifier</code></a>
 has been substantially changed.
-The <a href="/pkg/http/#Hijacker"><code>Hijacker</code></a>
+The <a href="/pkg/net/http/#Hijacker"><code>Hijacker</code></a>
 interface now works correctly on connections that have previously
 been used with <code>CloseNotifier</code>.
 The documentation now describes when <code>CloseNotifier</code>
@@ -740,17 +772,17 @@ is expected to work.
 <li>
 Also in the <a href="/pkg/net/http/"><code>net/http</code></a> package,
 there are a few changes related to the handling of a
-<a href="/pkg/http/#Request"><code>Request</code></a> data structure with its <code>Method</code> field set to the empty string.
+<a href="/pkg/net/http/#Request"><code>Request</code></a> data structure with its <code>Method</code> field set to the empty string.
 An empty <code>Method</code> field has always been documented as an alias for <code>"GET"</code>
 and it remains so.
 However, Go 1.6 fixes a few routines that did not treat an empty
 <code>Method</code> the same as an explicit <code>"GET"</code>.
 Most notably, in previous releases
-<a href="/pkg/http/#Client"><code>Client</code></a> followed redirects only with
+<a href="/pkg/net/http/#Client"><code>Client</code></a> followed redirects only with
 <code>Method</code> set explicitly to <code>"GET"</code>;
 in Go 1.6 <code>Client</code> also follows redirects for the empty <code>Method</code>.
 Finally,
-<a href="/pkg/http/#NewRequest"><code>NewRequest</code></a> accepts a <code>method</code> argument that has not been
+<a href="/pkg/net/http/#NewRequest"><code>NewRequest</code></a> accepts a <code>method</code> argument that has not been
 documented as allowed to be empty.
 In past releases, passing an empty <code>method</code> argument resulted
 in a <code>Request</code> with an empty <code>Method</code> field.
@@ -815,7 +847,7 @@ In the <a href="/pkg/os/exec/"><code>os/exec</code></a> package,
 <a href="/pkg/os/exec/#Cmd.Output"><code>Output</code></a> method continues to return an
 <a href="/pkg/os/exec/#ExitError"><code>ExitError</code></a> when a command exits with an unsuccessful status.
 If standard error would otherwise have been discarded,
-the returned <code>ExitError</code> now holds a prefix
+the returned <code>ExitError</code> now holds a prefix and suffix
 (currently 32 kB) of the failed command's standard error output,
 for debugging or for inclusion in error messages.
 The <code>ExitError</code>'s
diff --git a/doc/help.html b/doc/help.html
index 979d7bc..6448191 100644
--- a/doc/help.html
+++ b/doc/help.html
@@ -1,46 +1,62 @@
 <!--{
-	"Title": "Getting Help",
+	"Title": "Help",
 	"Path": "/help/"
 }-->
 
-<img class="gopher" src="/doc/gopher/help.png"/>
-
-<p>
-Need help with Go? Try these resources.
-</p>
-
 <div id="manual-nav"></div>
 
-<h3 id="faq"><a href="/doc/faq">Frequently Asked Questions (FAQ)</a></h3>
-<p>Answers to common questions about Go.</p>
+<h2 id="help">Get help</h2>
 
-<h3 id="playground"><a href="/play">The Go Playground</a></h3>
-<p>A place to write, run, and share Go code.</p>
-
-<h3 id="wiki"><a href="/wiki">The Go Wiki</a></h3>
-<p>A wiki maintained by the Go community.</p>
+<img class="gopher" src="/doc/gopher/help.png"/>
 
-<h3 id="mailinglist"><a href="//groups.google.com/group/golang-nuts">Go Nuts Mailing List</a></h3>
+<h3 id="mailinglist"><a href="https://groups.google.com/group/golang-nuts">Go Nuts Mailing List</a></h3>
 <p>
-Search the <a href="//groups.google.com/group/golang-nuts">golang-nuts</a>
+Search the <a href="https://groups.google.com/group/golang-nuts">golang-nuts</a>
 archives and consult the <a href="/doc/go_faq.html">FAQ</a> and
 <a href="//golang.org/wiki">wiki</a> before posting.
 </p>
 
+<h3 id="forum"><a href="https://forum.golangbridge.org/">Go Forum</a></h3>
+<p>
+The <a href="https://forum.golangbridge.org/">Go Forum</a> is an alternate discussion
+forum for Go programmers.
+</p>
+
+<h3 id="slack"><a href="https://blog.gopheracademy.com/gophers-slack-community/">Gopher Slack</a></h3>
+<p>Get live support from the official Go slack channel.</p>
+
 <h3 id="irc"><a href="irc:irc.freenode.net/go-nuts">Go IRC Channel</a></h3>
 <p>Get live support at <b>#go-nuts</b> on <b>irc.freenode.net</b>, the official
 Go IRC channel.</p>
 
-<h3 id="pluscom"><a href="https://plus.google.com/communities/114112804251407510571">The Go+ community</a></h3>
-<p>The Google+ community for Go enthusiasts.</p>
+<h3 id="faq"><a href="/doc/faq">Frequently Asked Questions (FAQ)</a></h3>
+<p>Answers to common questions about Go.</p>
+
+<h2 id="inform">Stay informed</h2>
+
+<h3 id="announce"><a href="https://groups.google.com/group/golang-announce">Go Announcements Mailing List</a></h3>
+<p>
+Subscribe to
+<a href="https://groups.google.com/group/golang-announce">golang-announce</a>
+for important announcements, such as the availability of new Go releases.
+</p>
 
-<h3 id="plus"><a href="https://plus.google.com/101406623878176903605/posts">The Go Programming Language at Google+</a></h3>
-<p>The Go project's Google+ page.</p>
+<h3 id="blog"><a href="//blog.golang.org">Go Blog</a></h3>
+<p>The Go project's official blog.</p>
 
-<h3 id="twitter"><a href="//twitter.com/golang">@golang at Twitter</a></h3>
+<h3 id="twitter"><a href="https://twitter.com/golang">@golang at Twitter</a></h3>
 <p>The Go project's official Twitter account.</p>
-<p>Tweeting about your problem with the <code>#golang</code> hashtag usually
-generates some helpful responses.</p>
+
+<h3 id="pluscom"><a href="https://plus.google.com/communities/114112804251407510571">Go+ community</a></h3>
+<p>A Google+ community for Go enthusiasts.</p>
+
+<h3 id="reddit"><a href="https://reddit.com/r/golang">golang sub-Reddit</a></h3>
+<p>
+The <a href="https://reddit.com/r/golang">golang sub-Reddit</a> is a place
+for Go news and discussion.
+</p>
+
+<h2 id="community">Community resources</h2>
 
 <h3 id="go_user_groups"><a href="/wiki/GoUserGroups">Go User Groups</a></h3>
 <p>
@@ -48,6 +64,12 @@ Each month in places around the world, groups of Go programmers ("gophers")
 meet to talk about Go. Find a chapter near you.
 </p>
 
+<h3 id="playground"><a href="/play">Go Playground</a></h3>
+<p>A place to write, run, and share Go code.</p>
+
+<h3 id="wiki"><a href="/wiki">Go Wiki</a></h3>
+<p>A wiki maintained by the Go community.</p>
+
 <h3 id="conduct"><a href="/conduct">Code of Conduct</a></h3>
 <p>
 Guidelines for participating in Go community spaces
diff --git a/doc/install-source.html b/doc/install-source.html
index 60931ad..332c720 100644
--- a/doc/install-source.html
+++ b/doc/install-source.html
@@ -173,6 +173,21 @@ follow the instructions on the
 <a href="http://git-scm.com/downloads">Git downloads</a> page.
 </p>
 
+<h2 id="ccompiler">(Optional) Install a C compiler</h2>
+
+<p>
+To build a Go installation
+with <code><a href="/cmd/cgo">cgo</a></code> support, which permits Go
+programs to import C libraries, a C compiler such as <code>gcc</code>
+or <code>clang</code> must be installed first. Do this using whatever
+installation method is standard on the system.
+</p>
+
+<p>
+To build without <code>cgo</code>, set the environment variable
+<code>CGO_ENABLED=0</code> before running <code>all.bash</code> or
+<code>make.bash</code>.
+</p>
 
 <h2 id="fetch">Fetch the repository</h2>
 
@@ -184,7 +199,7 @@ Then clone the repository and check out the latest release tag:</p>
 <pre>
 $ git clone https://go.googlesource.com/go
 $ cd go
-$ git checkout go1.5.2
+$ git checkout go1.5.3
 </pre>
 
 <h2 id="head">(Optional) Switch to the master branch</h2>
@@ -363,7 +378,7 @@ New releases are announced on the
 <a href="//groups.google.com/group/golang-announce">golang-announce</a>
 mailing list.
 Each announcement mentions the latest release tag, for instance,
-<code>go1.5.2</code>.
+<code>go1.5.3</code>.
 </p>
 
 <p>
diff --git a/lib/time/update.bash b/lib/time/update.bash
index 3ef1df5..3ffadc2 100755
--- a/lib/time/update.bash
+++ b/lib/time/update.bash
@@ -5,10 +5,11 @@
 
 # This script rebuilds the time zone files using files
 # downloaded from the ICANN/IANA distribution.
+# Consult http://www.iana.org/time-zones for the latest versions.
 
 # Versions to use.
-CODE=2015e
-DATA=2015e
+CODE=2015g
+DATA=2015g
 
 set -e
 rm -rf work
diff --git a/lib/time/zoneinfo.zip b/lib/time/zoneinfo.zip
index 73c30b4..740d819 100644
Binary files a/lib/time/zoneinfo.zip and b/lib/time/zoneinfo.zip differ
diff --git a/misc/cgo/errors/ptr.go b/misc/cgo/errors/ptr.go
index 0dd291f..834cde9 100644
--- a/misc/cgo/errors/ptr.go
+++ b/misc/cgo/errors/ptr.go
@@ -27,10 +27,16 @@ type ptrTest struct {
 	imports   []string // a list of imports
 	support   string   // supporting functions
 	body      string   // the body of the main function
+	extra     []extra  // extra files
 	fail      bool     // whether the test should fail
 	expensive bool     // whether the test requires the expensive check
 }
 
+type extra struct {
+	name     string
+	contents string
+}
+
 var ptrTests = []ptrTest{
 	{
 		// Passing a pointer to a struct that contains a Go pointer.
@@ -237,6 +243,43 @@ var ptrTests = []ptrTest{
                           func GoFn() *byte { return (*byte)(C.malloc(1)) }`,
 		body: `C.GoFn()`,
 	},
+	{
+		// Passing a Go string is fine.
+		name: "pass-string",
+		c: `#include <stddef.h>
+                    typedef struct { const char *p; ptrdiff_t n; } gostring;
+                    gostring f(gostring s) { return s; }`,
+		imports: []string{"unsafe"},
+		body:    `s := "a"; r := C.f(*(*C.gostring)(unsafe.Pointer(&s))); if *(*string)(unsafe.Pointer(&r)) != s { panic(r) }`,
+	},
+	{
+		// Passing a slice of Go strings fails.
+		name:    "pass-string-slice",
+		c:       `void f(void *p) {}`,
+		imports: []string{"strings", "unsafe"},
+		support: `type S struct { a [1]string }`,
+		body:    `s := S{a:[1]string{strings.Repeat("a", 2)}}; C.f(unsafe.Pointer(&s.a[0]))`,
+		fail:    true,
+	},
+	{
+		// Exported functions may not return strings.
+		name:    "ret-string",
+		c:       `extern void f();`,
+		imports: []string{"strings"},
+		support: `//export GoStr
+                          func GoStr() string { return strings.Repeat("a", 2) }`,
+		body: `C.f()`,
+		extra: []extra{
+			{
+				"call.c",
+				`#include <stddef.h>
+                                 typedef struct { const char *p; ptrdiff_t n; } gostring;
+                                 extern gostring GoStr();
+                                 void f() { GoStr(); }`,
+			},
+		},
+		fail: true,
+	},
 }
 
 func main() {
@@ -244,12 +287,17 @@ func main() {
 }
 
 func doTests() int {
-	dir, err := ioutil.TempDir("", "cgoerrors")
+	gopath, err := ioutil.TempDir("", "cgoerrors")
 	if err != nil {
 		fmt.Fprintln(os.Stderr, err)
 		return 2
 	}
-	defer os.RemoveAll(dir)
+	defer os.RemoveAll(gopath)
+
+	if err := os.MkdirAll(filepath.Join(gopath, "src"), 0777); err != nil {
+		fmt.Fprintln(os.Stderr, err)
+		return 2
+	}
 
 	workers := runtime.NumCPU() + 1
 
@@ -259,7 +307,7 @@ func doTests() int {
 	for i := 0; i < workers; i++ {
 		wg.Add(1)
 		go func() {
-			worker(dir, c, errs)
+			worker(gopath, c, errs)
 			wg.Done()
 		}()
 	}
@@ -281,10 +329,10 @@ func doTests() int {
 	return tot
 }
 
-func worker(dir string, c, errs chan int) {
+func worker(gopath string, c, errs chan int) {
 	e := 0
 	for i := range c {
-		if !doOne(dir, i) {
+		if !doOne(gopath, i) {
 			e++
 		}
 	}
@@ -293,9 +341,15 @@ func worker(dir string, c, errs chan int) {
 	}
 }
 
-func doOne(dir string, i int) bool {
+func doOne(gopath string, i int) bool {
 	t := &ptrTests[i]
 
+	dir := filepath.Join(gopath, "src", fmt.Sprintf("dir%d", i))
+	if err := os.Mkdir(dir, 0777); err != nil {
+		fmt.Fprintln(os.Stderr, err)
+		return false
+	}
+
 	name := filepath.Join(dir, fmt.Sprintf("t%d.go", i))
 	f, err := os.Create(name)
 	if err != nil {
@@ -330,13 +384,30 @@ func doOne(dir string, i int) bool {
 		return false
 	}
 	if err := f.Close(); err != nil {
-		fmt.Fprintln(os.Stderr, "closing %s: %v\n", name, err)
+		fmt.Fprintf(os.Stderr, "closing %s: %v\n", name, err)
 		return false
 	}
 
+	for _, e := range t.extra {
+		if err := ioutil.WriteFile(filepath.Join(dir, e.name), []byte(e.contents), 0644); err != nil {
+			fmt.Fprintf(os.Stderr, "writing %s: %v\n", e.name, err)
+			return false
+		}
+	}
+
 	ok := true
 
-	cmd := exec.Command("go", "run", name)
+	cmd := exec.Command("go", "build")
+	cmd.Dir = dir
+	cmd.Env = addEnv("GOPATH", gopath)
+	buf, err := cmd.CombinedOutput()
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "test %s failed to build: %v\n%s", t.name, err, buf)
+		return false
+	}
+
+	exe := filepath.Join(dir, filepath.Base(dir))
+	cmd = exec.Command(exe)
 	cmd.Dir = dir
 
 	if t.expensive {
@@ -354,7 +425,7 @@ func doOne(dir string, i int) bool {
 			ok = false
 		}
 
-		cmd = exec.Command("go", "run", name)
+		cmd = exec.Command(exe)
 		cmd.Dir = dir
 	}
 
@@ -362,7 +433,7 @@ func doOne(dir string, i int) bool {
 		cmd.Env = cgocheckEnv("2")
 	}
 
-	buf, err := cmd.CombinedOutput()
+	buf, err = cmd.CombinedOutput()
 
 	if t.fail {
 		if err == nil {
@@ -389,7 +460,7 @@ func doOne(dir string, i int) bool {
 
 		if !t.expensive && ok {
 			// Make sure it passes with the expensive checks.
-			cmd := exec.Command("go", "run", name)
+			cmd := exec.Command(exe)
 			cmd.Dir = dir
 			cmd.Env = cgocheckEnv("2")
 			buf, err := cmd.CombinedOutput()
@@ -404,7 +475,7 @@ func doOne(dir string, i int) bool {
 	}
 
 	if t.fail && ok {
-		cmd = exec.Command("go", "run", name)
+		cmd = exec.Command(exe)
 		cmd.Dir = dir
 		cmd.Env = cgocheckEnv("0")
 		buf, err := cmd.CombinedOutput()
@@ -427,9 +498,14 @@ func reportTestOutput(w io.Writer, name string, buf []byte) {
 }
 
 func cgocheckEnv(val string) []string {
-	env := []string{"GODEBUG=cgocheck=" + val}
+	return addEnv("GODEBUG", "cgocheck="+val)
+}
+
+func addEnv(key, val string) []string {
+	env := []string{key + "=" + val}
+	look := key + "="
 	for _, e := range os.Environ() {
-		if !strings.HasPrefix(e, "GODEBUG=") {
+		if !strings.HasPrefix(e, look) {
 			env = append(env, e)
 		}
 	}
diff --git a/misc/cgo/test/sigaltstack.go b/misc/cgo/test/sigaltstack.go
index 787653c..b641ff6 100644
--- a/misc/cgo/test/sigaltstack.go
+++ b/misc/cgo/test/sigaltstack.go
@@ -30,7 +30,7 @@ static void changeSignalStack() {
 }
 
 static void restoreSignalStack() {
-#if defined(__x86_64__) && defined(__APPLE__)
+#if (defined(__x86_64__) || defined(__i386__)) && defined(__APPLE__)
 	// The Darwin C library enforces a minimum that the kernel does not.
 	// This is OK since we allocated this much space in mpreinit,
 	// it was just removed from the buffer by stackalloc.
@@ -57,6 +57,8 @@ func testSigaltstack(t *testing.T) {
 	switch {
 	case runtime.GOOS == "solaris", runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64"):
 		t.Skipf("switching signal stack not implemented on %s/%s", runtime.GOOS, runtime.GOARCH)
+	case runtime.GOOS == "darwin" && runtime.GOARCH == "386":
+		t.Skipf("sigaltstack fails on darwin/386")
 	}
 
 	C.changeSignalStack()
diff --git a/misc/cgo/testcarchive/test.bash b/misc/cgo/testcarchive/test.bash
index f4b4a30..f4e7c45 100755
--- a/misc/cgo/testcarchive/test.bash
+++ b/misc/cgo/testcarchive/test.bash
@@ -85,4 +85,22 @@ if ! $bin; then
 fi
 rm -rf libgo4.a libgo4.h testp pkg
 
+rm -f testar
+cat >testar <<EOF
+#!/usr/bin/env bash
+while expr \$1 : '[-]' >/dev/null; do
+  shift
+done
+echo "testar" > \$1
+echo "testar" > $(pwd)/testar.ran
+EOF
+chmod +x testar
+rm -f testar.ran
+GOPATH=$(pwd) go build -buildmode=c-archive -ldflags=-extar=$(pwd)/testar -o libgo4.a libgo4
+if ! test -f testar.ran; then
+    echo "FAIL test5"
+    status=1
+fi
+rm -rf libgo4.a libgo4.h testar testar.ran pkg
+
 exit $status
diff --git a/misc/cgo/testshared/shared_test.go b/misc/cgo/testshared/shared_test.go
index 592a917..86fb530 100644
--- a/misc/cgo/testshared/shared_test.go
+++ b/misc/cgo/testshared/shared_test.go
@@ -749,3 +749,15 @@ func TestABIChecking(t *testing.T) {
 	goCmd(t, "install", "-buildmode=shared", "-linkshared", "dep")
 	run(t, "after non-ABI breaking change", "./bin/exe")
 }
+
+// If a package 'explicit' imports a package 'implicit', building
+// 'explicit' into a shared library implicitly includes implicit in
+// the shared library. Building an executable that imports both
+// explicit and implicit builds the code from implicit into the
+// executable rather than fetching it from the shared library. The
+// link still succeeds and the executable still runs though.
+func TestImplicitInclusion(t *testing.T) {
+	goCmd(t, "install", "-buildmode=shared", "-linkshared", "explicit")
+	goCmd(t, "install", "-linkshared", "implicitcmd")
+	run(t, "running executable linked against library that contains same package as it", "./bin/implicitcmd")
+}
diff --git a/misc/cgo/testshared/src/explicit/explicit.go b/misc/cgo/testshared/src/explicit/explicit.go
new file mode 100644
index 0000000..6a4453f
--- /dev/null
+++ b/misc/cgo/testshared/src/explicit/explicit.go
@@ -0,0 +1,9 @@
+package explicit
+
+import (
+	"implicit"
+)
+
+func E() int {
+	return implicit.I()
+}
diff --git a/misc/cgo/testshared/src/implicit/implicit.go b/misc/cgo/testshared/src/implicit/implicit.go
new file mode 100644
index 0000000..5360188
--- /dev/null
+++ b/misc/cgo/testshared/src/implicit/implicit.go
@@ -0,0 +1,5 @@
+package implicit
+
+func I() int {
+	return 42
+}
diff --git a/misc/cgo/testshared/src/implicitcmd/implicitcmd.go b/misc/cgo/testshared/src/implicitcmd/implicitcmd.go
new file mode 100644
index 0000000..f611293
--- /dev/null
+++ b/misc/cgo/testshared/src/implicitcmd/implicitcmd.go
@@ -0,0 +1,10 @@
+package main
+
+import (
+	"explicit"
+	"implicit"
+)
+
+func main() {
+	println(implicit.I() + explicit.E())
+}
diff --git a/misc/nacl/testzip.proto b/misc/nacl/testzip.proto
index b51e8da..c8ab18e 100644
--- a/misc/nacl/testzip.proto
+++ b/misc/nacl/testzip.proto
@@ -32,9 +32,6 @@ go	src=..
 				gofmt_test.go
 				testdata
 					+
-			newlink
-				testdata
-					+
 			vendor
 				golang.org
 						x
diff --git a/src/archive/zip/example_test.go b/src/archive/zip/example_test.go
index 8dd79cc..1eed304 100644
--- a/src/archive/zip/example_test.go
+++ b/src/archive/zip/example_test.go
@@ -76,8 +76,7 @@ func ExampleReader() {
 }
 
 func ExampleWriter_RegisterCompressor() {
-	// Override the default Deflate compressor with a higher compression
-	// level.
+	// Override the default Deflate compressor with a higher compression level.
 
 	// Create a buffer to write our archive to.
 	buf := new(bytes.Buffer)
@@ -85,19 +84,9 @@ func ExampleWriter_RegisterCompressor() {
 	// Create a new zip archive.
 	w := zip.NewWriter(buf)
 
-	var fw *flate.Writer
-
-	// Register the deflator.
+	// Register a custom Deflate compressor.
 	w.RegisterCompressor(zip.Deflate, func(out io.Writer) (io.WriteCloser, error) {
-		var err error
-		if fw == nil {
-			// Creating a flate compressor for every file is
-			// expensive, create one and reuse it.
-			fw, err = flate.NewWriter(out, flate.BestCompression)
-		} else {
-			fw.Reset(out)
-		}
-		return fw, err
+		return flate.NewWriter(out, flate.BestCompression)
 	})
 
 	// Proceed to add files to w.
diff --git a/src/archive/zip/reader.go b/src/archive/zip/reader.go
index 9a0e20d..84a9d41 100644
--- a/src/archive/zip/reader.go
+++ b/src/archive/zip/reader.go
@@ -118,8 +118,6 @@ func (z *Reader) init(r io.ReaderAt, size int64) error {
 // RegisterDecompressor registers or overrides a custom decompressor for a
 // specific method ID. If a decompressor for a given method is not found,
 // Reader will default to looking up the decompressor at the package level.
-//
-// Must not be called concurrently with Open on any Files in the Reader.
 func (z *Reader) RegisterDecompressor(method uint16, dcomp Decompressor) {
 	if z.decompressors == nil {
 		z.decompressors = make(map[uint16]Decompressor)
diff --git a/src/archive/zip/register.go b/src/archive/zip/register.go
index 4211ec7..8fccbf7 100644
--- a/src/archive/zip/register.go
+++ b/src/archive/zip/register.go
@@ -12,15 +12,19 @@ import (
 	"sync"
 )
 
-// A Compressor returns a compressing writer, writing to the
-// provided writer. On Close, any pending data should be flushed.
-type Compressor func(io.Writer) (io.WriteCloser, error)
-
-// Decompressor is a function that wraps a Reader with a decompressing Reader.
-// The decompressed ReadCloser is returned to callers who open files from
-// within the archive.  These callers are responsible for closing this reader
-// when they're finished reading.
-type Decompressor func(io.Reader) io.ReadCloser
+// A Compressor returns a new compressing writer, writing to w.
+// The WriteCloser's Close method must be used to flush pending data to w.
+// The Compressor itself must be safe to invoke from multiple goroutines
+// simultaneously, but each returned writer will be used only by
+// one goroutine at a time.
+type Compressor func(w io.Writer) (io.WriteCloser, error)
+
+// A Decompressor returns a new decompressing reader, reading from r.
+// The ReadCloser's Close method must be used to release associated resources.
+// The Decompressor itself must be safe to invoke from multiple goroutines
+// simultaneously, but each returned reader will be used only by
+// one goroutine at a time.
+type Decompressor func(r io.Reader) io.ReadCloser
 
 var flateWriterPool sync.Pool
 
@@ -75,14 +79,15 @@ var (
 )
 
 // RegisterDecompressor allows custom decompressors for a specified method ID.
-func RegisterDecompressor(method uint16, d Decompressor) {
+// The common methods Store and Deflate are built in.
+func RegisterDecompressor(method uint16, dcomp Decompressor) {
 	mu.Lock()
 	defer mu.Unlock()
 
 	if _, ok := decompressors[method]; ok {
 		panic("decompressor already registered")
 	}
-	decompressors[method] = d
+	decompressors[method] = dcomp
 }
 
 // RegisterCompressor registers custom compressors for a specified method ID.
diff --git a/src/bootstrap.bash b/src/bootstrap.bash
index 1b5ba7c..7947e84 100755
--- a/src/bootstrap.bash
+++ b/src/bootstrap.bash
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/usr/bin/env bash
 # Copyright 2015 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/buildall.bash b/src/buildall.bash
index ba23d31..f686dd8 100755
--- a/src/buildall.bash
+++ b/src/buildall.bash
@@ -33,7 +33,7 @@ if [ "$pattern" = "" ]; then
 fi
 
 # put linux, nacl first in the target list to get all the architectures up front.
-targets="$((ls runtime | sed -n 's/^rt0_\(.*\)_\(.*\)\.s/\1-\2/p'; echo linux-386-387 linux-arm-arm5) | sort | egrep -v android-arm | egrep "$pattern" | egrep 'linux|nacl')
+targets="$((ls runtime | sed -n 's/^rt0_\(.*\)_\(.*\)\.s/\1-\2/p'; echo linux-386-387 linux-arm-arm5) | sort | sed -e 's|linux-mips64x|linux-mips64 linux-mips64le|' | egrep -v android-arm | egrep "$pattern" | egrep 'linux|nacl')
 $(ls runtime | sed -n 's/^rt0_\(.*\)_\(.*\)\.s/\1-\2/p' | egrep -v 'android-arm|darwin-arm' | egrep "$pattern" | egrep -v 'linux|nacl')"
 
 ./make.bash || exit 1
diff --git a/src/cmd/asm/internal/arch/arch.go b/src/cmd/asm/internal/arch/arch.go
index b6a51a8..c14a13c 100644
--- a/src/cmd/asm/internal/arch/arch.go
+++ b/src/cmd/asm/internal/arch/arch.go
@@ -162,11 +162,11 @@ func archX86(linkArch *obj.LinkArch) *Arch {
 	instructions["MOVDQ2Q"] = x86.AMOVQ
 	instructions["MOVNTDQ"] = x86.AMOVNTO
 	instructions["MOVOA"] = x86.AMOVO
-	instructions["MOVOA"] = x86.AMOVO
 	instructions["PF2ID"] = x86.APF2IL
 	instructions["PI2FD"] = x86.API2FL
 	instructions["PSLLDQ"] = x86.APSLLO
 	instructions["PSRLDQ"] = x86.APSRLO
+	instructions["PADDD"] = x86.APADDL
 
 	return &Arch{
 		LinkArch:       linkArch,
diff --git a/src/cmd/asm/internal/arch/arm.go b/src/cmd/asm/internal/arch/arm.go
index 8df994e..502a906 100644
--- a/src/cmd/asm/internal/arch/arm.go
+++ b/src/cmd/asm/internal/arch/arm.go
@@ -62,6 +62,7 @@ var armSCOND = map[string]uint8{
 var armJump = map[string]bool{
 	"B":    true,
 	"BL":   true,
+	"BX":   true,
 	"BEQ":  true,
 	"BNE":  true,
 	"BCS":  true,
diff --git a/src/cmd/asm/internal/asm/asm.go b/src/cmd/asm/internal/asm/asm.go
index 9da3664..9827d70 100644
--- a/src/cmd/asm/internal/asm/asm.go
+++ b/src/cmd/asm/internal/asm/asm.go
@@ -63,7 +63,7 @@ func (p *Parser) append(prog *obj.Prog, cond string, doLabel bool) {
 		fmt.Println(p.histLineNum, prog)
 	}
 	if testOut != nil {
-		fmt.Fprintln(testOut, p.histLineNum, prog)
+		fmt.Fprintln(testOut, prog)
 	}
 }
 
diff --git a/src/cmd/asm/internal/asm/endtoend_test.go b/src/cmd/asm/internal/asm/endtoend_test.go
index 6e339ad..4bc7e2f 100644
--- a/src/cmd/asm/internal/asm/endtoend_test.go
+++ b/src/cmd/asm/internal/asm/endtoend_test.go
@@ -8,9 +8,11 @@ import (
 	"bytes"
 	"fmt"
 	"io/ioutil"
-	"log"
 	"os"
 	"path/filepath"
+	"regexp"
+	"sort"
+	"strconv"
 	"strings"
 	"testing"
 
@@ -22,74 +24,368 @@ import (
 // Output is generated by, in effect, turning on -S and comparing the
 // result against a golden file.
 
-func testEndToEnd(t *testing.T, goarch string) {
+func testEndToEnd(t *testing.T, goarch, file string) {
 	lex.InitHist()
-	input := filepath.Join("testdata", goarch+".s")
-	output := filepath.Join("testdata", goarch+".out")
+	input := filepath.Join("testdata", file+".s")
 	architecture, ctxt := setArch(goarch)
 	lexer := lex.NewLexer(input, ctxt)
 	parser := NewParser(ctxt, architecture, lexer)
 	pList := obj.Linknewplist(ctxt)
 	var ok bool
-	testOut = new(bytes.Buffer) // The assembler writes -S output to this buffer.
+	testOut = new(bytes.Buffer) // The assembler writes test output to this buffer.
 	ctxt.Bso = obj.Binitw(os.Stdout)
 	defer ctxt.Bso.Flush()
-	ctxt.Diag = log.Fatalf
-	obj.Binitw(ioutil.Discard)
+	failed := false
+	ctxt.DiagFunc = func(format string, args ...interface{}) {
+		failed = true
+		t.Errorf(format, args...)
+	}
 	pList.Firstpc, ok = parser.Parse()
-	if !ok {
-		t.Fatalf("asm: %s assembly failed", goarch)
+	if !ok || failed {
+		t.Errorf("asm: %s assembly failed", goarch)
+		return
 	}
-	result := string(testOut.Bytes())
-	expect, err := ioutil.ReadFile(output)
-	// For Windows.
-	result = strings.Replace(result, `testdata\`, `testdata/`, -1)
+	output := strings.Split(testOut.String(), "\n")
+
+	// Reconstruct expected output by independently "parsing" the input.
+	data, err := ioutil.ReadFile(input)
 	if err != nil {
-		t.Fatal(err)
-	}
-	if result != string(expect) {
-		if false { // Enable to capture output.
-			fmt.Printf("%s", result)
-			os.Exit(1)
-		}
-		t.Errorf("%s failed: output differs", goarch)
-		r := strings.Split(result, "\n")
-		e := strings.Split(string(expect), "\n")
-		if len(r) != len(e) {
-			t.Errorf("%s: expected %d lines, got %d", goarch, len(e), len(r))
-		}
-		n := len(e)
-		if n > len(r) {
-			n = len(r)
-		}
-		for i := 0; i < n; i++ {
-			if r[i] != e[i] {
-				t.Errorf("%s:%d:\nexpected\n\t%s\ngot\n\t%s", output, i, e[i], r[i])
+		t.Error(err)
+		return
+	}
+	lineno := 0
+	seq := 0
+	hexByLine := map[string]string{}
+	lines := strings.SplitAfter(string(data), "\n")
+Diff:
+	for _, line := range lines {
+		lineno++
+
+		// The general form of a test input line is:
+		//	// comment
+		//	INST args [// printed form] [// hex encoding]
+		parts := strings.Split(line, "//")
+		printed := strings.TrimSpace(parts[0])
+		if printed == "" || strings.HasSuffix(printed, ":") { // empty or label
+			continue
+		}
+		seq++
+
+		var hexes string
+		switch len(parts) {
+		default:
+			t.Errorf("%s:%d: unable to understand comments: %s", input, lineno, line)
+		case 1:
+			// no comment
+		case 2:
+			// might be printed form or hex
+			note := strings.TrimSpace(parts[1])
+			if isHexes(note) {
+				hexes = note
+			} else {
+				printed = note
+			}
+		case 3:
+			// printed form, then hex
+			printed = strings.TrimSpace(parts[1])
+			hexes = strings.TrimSpace(parts[2])
+			if !isHexes(hexes) {
+				t.Errorf("%s:%d: malformed hex instruction encoding: %s", input, lineno, line)
+			}
+		}
+
+		if hexes != "" {
+			hexByLine[fmt.Sprintf("%s:%d", input, lineno)] = hexes
+		}
+
+		// Canonicalize spacing in printed form.
+		// First field is opcode, then tab, then arguments separated by spaces.
+		// Canonicalize spaces after commas first.
+		// Comma to separate argument gets a space; comma within does not.
+		var buf []byte
+		nest := 0
+		for i := 0; i < len(printed); i++ {
+			c := printed[i]
+			switch c {
+			case '{', '[':
+				nest++
+			case '}', ']':
+				nest--
+			case ',':
+				buf = append(buf, ',')
+				if nest == 0 {
+					buf = append(buf, ' ')
+				}
+				for i+1 < len(printed) && (printed[i+1] == ' ' || printed[i+1] == '\t') {
+					i++
+				}
+				continue
 			}
+			buf = append(buf, c)
+		}
+
+		f := strings.Fields(string(buf))
+
+		// Turn relative (PC) into absolute (PC) automatically,
+		// so that most branch instructions don't need comments
+		// giving the absolute form.
+		if len(f) > 0 && strings.HasSuffix(printed, "(PC)") {
+			last := f[len(f)-1]
+			n, err := strconv.Atoi(last[:len(last)-len("(PC)")])
+			if err == nil {
+				f[len(f)-1] = fmt.Sprintf("%d(PC)", seq+n)
+			}
+		}
+
+		if len(f) == 1 {
+			printed = f[0]
+		} else {
+			printed = f[0] + "\t" + strings.Join(f[1:], " ")
+		}
+
+		want := fmt.Sprintf("%05d (%s:%d)\t%s", seq, input, lineno, printed)
+		for len(output) > 0 && (output[0] < want || output[0] != want && len(output[0]) >= 5 && output[0][:5] == want[:5]) {
+			if len(output[0]) >= 5 && output[0][:5] == want[:5] {
+				t.Errorf("mismatched output:\nhave %s\nwant %s", output[0], want)
+				output = output[1:]
+				continue Diff
+			}
+			t.Errorf("unexpected output: %q", output[0])
+			output = output[1:]
+		}
+		if len(output) > 0 && output[0] == want {
+			output = output[1:]
+		} else {
+			t.Errorf("missing output: %q", want)
+		}
+	}
+	for len(output) > 0 {
+		if output[0] == "" {
+			// spurious blank caused by Split on "\n"
+			output = output[1:]
+			continue
 		}
+		t.Errorf("unexpected output: %q", output[0])
+		output = output[1:]
 	}
+
+	// Checked printing.
+	// Now check machine code layout.
+
+	top := pList.Firstpc
+	var text *obj.LSym
+	ok = true
+	ctxt.DiagFunc = func(format string, args ...interface{}) {
+		t.Errorf(format, args...)
+		ok = false
+	}
+	obj.Flushplist(ctxt)
+
+	for p := top; p != nil; p = p.Link {
+		if p.As == obj.ATEXT {
+			text = p.From.Sym
+		}
+		hexes := hexByLine[p.Line()]
+		if hexes == "" {
+			continue
+		}
+		delete(hexByLine, p.Line())
+		if text == nil {
+			t.Errorf("%s: instruction outside TEXT", p)
+		}
+		size := int64(len(text.P)) - p.Pc
+		if p.Link != nil {
+			size = p.Link.Pc - p.Pc
+		} else if p.Isize != 0 {
+			size = int64(p.Isize)
+		}
+		var code []byte
+		if p.Pc < int64(len(text.P)) {
+			code = text.P[p.Pc:]
+			if size < int64(len(code)) {
+				code = code[:size]
+			}
+		}
+		codeHex := fmt.Sprintf("%x", code)
+		if codeHex == "" {
+			codeHex = "empty"
+		}
+		ok := false
+		for _, hex := range strings.Split(hexes, " or ") {
+			if codeHex == hex {
+				ok = true
+				break
+			}
+		}
+		if !ok {
+			t.Errorf("%s: have encoding %s, want %s", p, codeHex, hexes)
+		}
+	}
+
+	if len(hexByLine) > 0 {
+		var missing []string
+		for key := range hexByLine {
+			missing = append(missing, key)
+		}
+		sort.Strings(missing)
+		for _, line := range missing {
+			t.Errorf("%s: did not find instruction encoding", line)
+		}
+	}
+
 }
 
-func TestPPC64EndToEnd(t *testing.T) {
-	testEndToEnd(t, "ppc64")
+func isHexes(s string) bool {
+	if s == "" {
+		return false
+	}
+	if s == "empty" {
+		return true
+	}
+	for _, f := range strings.Split(s, " or ") {
+		if f == "" || len(f)%2 != 0 || strings.TrimLeft(f, "0123456789abcdef") != "" {
+			return false
+		}
+	}
+	return true
+}
+
+// It would be nice if the error messages began with
+// the standard file:line: prefix,
+// but that's not where we are today.
+// It might be at the beginning but it might be in the middle of the printed instruction.
+var fileLineRE = regexp.MustCompile(`(?:^|\()(testdata[/\\][0-9a-z]+\.s:[0-9]+)(?:$|\))`)
+
+// Same as in test/run.go
+var (
+	errRE       = regexp.MustCompile(`// ERROR ?(.*)`)
+	errQuotesRE = regexp.MustCompile(`"([^"]*)"`)
+)
+
+func testErrors(t *testing.T, goarch, file string) {
+	lex.InitHist()
+	input := filepath.Join("testdata", file+".s")
+	architecture, ctxt := setArch(goarch)
+	lexer := lex.NewLexer(input, ctxt)
+	parser := NewParser(ctxt, architecture, lexer)
+	pList := obj.Linknewplist(ctxt)
+	var ok bool
+	testOut = new(bytes.Buffer) // The assembler writes test output to this buffer.
+	ctxt.Bso = obj.Binitw(os.Stdout)
+	defer ctxt.Bso.Flush()
+	failed := false
+	var errBuf bytes.Buffer
+	ctxt.DiagFunc = func(format string, args ...interface{}) {
+		failed = true
+		s := fmt.Sprintf(format, args...)
+		if !strings.HasSuffix(s, "\n") {
+			s += "\n"
+		}
+		errBuf.WriteString(s)
+	}
+	pList.Firstpc, ok = parser.Parse()
+	obj.Flushplist(ctxt)
+	if ok && !failed {
+		t.Errorf("asm: %s had no errors", goarch)
+	}
+
+	errors := map[string]string{}
+	for _, line := range strings.Split(errBuf.String(), "\n") {
+		if line == "" || strings.HasPrefix(line, "\t") {
+			continue
+		}
+		m := fileLineRE.FindStringSubmatch(line)
+		if m == nil {
+			t.Errorf("unexpected error: %v", line)
+			continue
+		}
+		fileline := m[1]
+		if errors[fileline] != "" {
+			t.Errorf("multiple errors on %s:\n\t%s\n\t%s", fileline, errors[fileline], line)
+			continue
+		}
+		errors[fileline] = line
+	}
+
+	// Reconstruct expected errors by independently "parsing" the input.
+	data, err := ioutil.ReadFile(input)
+	if err != nil {
+		t.Error(err)
+		return
+	}
+	lineno := 0
+	lines := strings.Split(string(data), "\n")
+	for _, line := range lines {
+		lineno++
+
+		fileline := fmt.Sprintf("%s:%d", input, lineno)
+		if m := errRE.FindStringSubmatch(line); m != nil {
+			all := m[1]
+			mm := errQuotesRE.FindAllStringSubmatch(all, -1)
+			if len(mm) != 1 {
+				t.Errorf("%s: invalid errorcheck line:\n%s", fileline, line)
+			} else if err := errors[fileline]; err == "" {
+				t.Errorf("%s: missing error, want %s", fileline, all)
+			} else if !strings.Contains(err, mm[0][1]) {
+				t.Errorf("%s: wrong error for %s:\n%s", fileline, all, err)
+			}
+		} else {
+			if errors[fileline] != "" {
+				t.Errorf("unexpected error on %s: %v", fileline, errors[fileline])
+			}
+		}
+		delete(errors, fileline)
+	}
+	var extra []string
+	for key := range errors {
+		extra = append(extra, key)
+	}
+	sort.Strings(extra)
+	for _, fileline := range extra {
+		t.Errorf("unexpected error on %s: %v", fileline, errors[fileline])
+	}
+}
+
+func Test386EndToEnd(t *testing.T) {
+	defer os.Setenv("GO386", os.Getenv("GO386"))
+
+	for _, go386 := range []string{"387", "sse"} {
+		os.Setenv("GO386", go386)
+		t.Logf("GO386=%v", os.Getenv("GO386"))
+		testEndToEnd(t, "386", "386")
+	}
 }
 
 func TestARMEndToEnd(t *testing.T) {
-	testEndToEnd(t, "arm")
+	defer os.Setenv("GOARM", os.Getenv("GOARM"))
+
+	for _, goarm := range []string{"5", "6", "7"} {
+		os.Setenv("GOARM", goarm)
+		t.Logf("GOARM=%v", os.Getenv("GOARM"))
+		testEndToEnd(t, "arm", "arm")
+	}
 }
 
 func TestARM64EndToEnd(t *testing.T) {
-	testEndToEnd(t, "arm64")
+	testEndToEnd(t, "arm64", "arm64")
 }
 
 func TestAMD64EndToEnd(t *testing.T) {
-	testEndToEnd(t, "amd64")
+	testEndToEnd(t, "amd64", "amd64")
 }
 
-func Test386EndToEnd(t *testing.T) {
-	testEndToEnd(t, "386")
+func TestAMD64Encoder(t *testing.T) {
+	testEndToEnd(t, "amd64", "amd64enc")
+}
+
+func TestAMD64Errors(t *testing.T) {
+	testErrors(t, "amd64", "amd64error")
 }
 
 func TestMIPS64EndToEnd(t *testing.T) {
-	testEndToEnd(t, "mips64")
+	testEndToEnd(t, "mips64", "mips64")
+}
+
+func TestPPC64EndToEnd(t *testing.T) {
+	testEndToEnd(t, "ppc64", "ppc64")
 }
diff --git a/src/cmd/asm/internal/asm/parse.go b/src/cmd/asm/internal/asm/parse.go
index 9a42838..4258c5c 100644
--- a/src/cmd/asm/internal/asm/parse.go
+++ b/src/cmd/asm/internal/asm/parse.go
@@ -16,6 +16,7 @@ import (
 	"unicode/utf8"
 
 	"cmd/asm/internal/arch"
+	"cmd/asm/internal/flags"
 	"cmd/asm/internal/lex"
 	"cmd/internal/obj"
 )
@@ -78,7 +79,7 @@ func (p *Parser) errorf(format string, args ...interface{}) {
 	}
 	fmt.Fprintf(p.errorWriter, format, args...)
 	p.errorCount++
-	if p.errorCount > 10 {
+	if p.errorCount > 10 && !*flags.AllErrors {
 		log.Fatal("too many errors")
 	}
 }
diff --git a/src/cmd/asm/internal/asm/testdata/386.out b/src/cmd/asm/internal/asm/testdata/386.out
deleted file mode 100644
index be43ccb..0000000
--- a/src/cmd/asm/internal/asm/testdata/386.out
+++ /dev/null
@@ -1,49 +0,0 @@
-5 00001 (testdata/386.s:5)	TEXT	foo(SB), 0, $0
-8 00002 (testdata/386.s:8)	SETCC	AX
-9 00003 (testdata/386.s:9)	SETCC	foo+4(SB)
-12 00004 (testdata/386.s:12)	DIVB	AX
-13 00005 (testdata/386.s:13)	DIVB	foo+4(SB)
-14 00006 (testdata/386.s:14)	PUSHL	$foo+4(SB)
-15 00007 (testdata/386.s:15)	POPL	AX
-18 00008 (testdata/386.s:18)	SUBB	$1, AX
-19 00009 (testdata/386.s:19)	SUBB	$1, foo+4(SB)
-20 00010 (testdata/386.s:20)	SUBB	BX, AX
-21 00011 (testdata/386.s:21)	SUBB	BX, foo+4(SB)
-24 00012 (testdata/386.s:24)	CMPB	AX, $1
-25 00013 (testdata/386.s:25)	CMPB	foo+4(SB), $4
-26 00014 (testdata/386.s:26)	CMPB	BX, AX
-27 00015 (testdata/386.s:27)	CMPB	foo+4(SB), BX
-31 00016 (testdata/386.s:31)	JCS
-32 00017 (testdata/386.s:32)	JCS	16(PC)
-35 00018 (testdata/386.s:35)	CALL	AX
-36 00019 (testdata/386.s:36)	JMP	AX
-37 00020 (testdata/386.s:37)	CALL	*foo(SB)
-38 00021 (testdata/386.s:38)	JMP	$4
-39 00022 (testdata/386.s:39)	JMP	16
-40 00023 (testdata/386.s:40)	CALL	foo(SB)
-42 00024 (testdata/386.s:42)	CALL	foo+4(SB)(AX*4)
-43 00025 (testdata/386.s:43)	CALL	4(SP)
-44 00026 (testdata/386.s:44)	CALL	(AX)
-45 00027 (testdata/386.s:45)	CALL	(SP)
-47 00028 (testdata/386.s:47)	CALL	(AX)(AX*4)
-48 00029 (testdata/386.s:48)	CALL	4(SP)
-49 00030 (testdata/386.s:49)	CALL	(AX)
-50 00031 (testdata/386.s:50)	CALL	(SP)
-52 00032 (testdata/386.s:52)	JMP	(AX)(AX*4)
-55 00033 (testdata/386.s:55)	NOP
-56 00034 (testdata/386.s:56)	NOP	AX
-57 00035 (testdata/386.s:57)	NOP	foo+4(SB)
-60 00036 (testdata/386.s:60)	SHLL	$4, BX
-61 00037 (testdata/386.s:61)	SHLL	$4, foo+4(SB)
-62 00038 (testdata/386.s:62)	SHLL	$4, AX, foo+4(SB)
-65 00039 (testdata/386.s:65)	MOVL	AX, BX
-66 00040 (testdata/386.s:66)	MOVL	$4, BX
-69 00041 (testdata/386.s:69)	IMULL	AX
-70 00042 (testdata/386.s:70)	IMULL	$4, CX
-71 00043 (testdata/386.s:71)	IMULL	AX, BX
-74 00044 (testdata/386.s:74)	CMPPD	X0, X1, 4
-75 00045 (testdata/386.s:75)	CMPPD	X0, foo+4(SB), 4
-78 00046 (testdata/386.s:78)	PINSRD	$1, (AX), X0
-79 00047 (testdata/386.s:79)	PINSRD	$2, foo+4(FP), X0
-83 00048 (testdata/386.s:83)	LOOP
-86 00049 (testdata/386.s:86)	RET
diff --git a/src/cmd/asm/internal/asm/testdata/386.s b/src/cmd/asm/internal/asm/testdata/386.s
index 6bee39f..4d969d1 100644
--- a/src/cmd/asm/internal/asm/testdata/386.s
+++ b/src/cmd/asm/internal/asm/testdata/386.s
@@ -2,7 +2,7 @@
 // the old assembler's (8a's) grammar and hand-writing complete
 // instructions for each rule, to guarantee we cover the same space.
 
-TEXT foo(SB), 0, $0
+TEXT foo(SB), 7, $0
 
 // LTYPE1 nonrem	{ outcode(int($1), &$2); }
 	SETCC	AX
@@ -12,7 +12,7 @@ TEXT foo(SB), 0, $0
 	DIVB	AX
 	DIVB	foo+4(SB)
 	PUSHL	$foo+4(SB)
-	POPL		AX // balance PUSHL
+	POPL		AX
 
 // LTYPE3 rimrem	{ outcode(int($1), &$2); }
 	SUBB	$1, AX
@@ -28,27 +28,31 @@ TEXT foo(SB), 0, $0
 
 // LTYPER nonrel	{ outcode(int($1), &$2); }
 label:
-	JC	label
-	JC	-1(PC)
+	JC	label // JCS
+	JC	-1(PC) // JCS -1(PC)
 
 // LTYPEC spec3	{ outcode(int($1), &$2); }
 	CALL	AX
-	JMP	*AX
+	JCS	2(PC)
+	JMP	*AX // JMP AX
 	CALL	*foo(SB)
+	JCS	2(PC)
 	JMP	$4
-	JMP	label
+	JCS	2(PC)
+	JMP	label // JMP 16
 	CALL	foo(SB)
-	CALL	(AX*4)
+//	CALL	(AX*4) // TODO: This line is silently dropped on the floor!
 	CALL	foo+4(SB)(AX*4)
-	CALL	*4(SP)
-	CALL	*(AX)
-	CALL	*(SP)
-	CALL	*(AX*4)
-	CALL	*(AX)(AX*4)
+	CALL	*4(SP) // CALL 4(SP)
+	CALL	*(AX) // CALL (AX)
+	CALL	*(SP) // CALL (SP)
+//	CALL	*(AX*4) // TODO: This line is silently dropped on the floor!
+	CALL	*(AX)(AX*4) // CALL (AX)(AX*4)
 	CALL	4(SP)
 	CALL	(AX)
 	CALL	(SP)
-	CALL	(AX*4)
+//	CALL	(AX*4) // TODO: This line is silently dropped on the floor!
+	JCS	2(PC)
 	JMP	(AX)(AX*4)
 
 // LTYPEN spec4	{ outcode(int($1), &$2); }
@@ -59,7 +63,7 @@ label:
 // LTYPES spec5	{ outcode(int($1), &$2); }
 	SHLL	$4, BX
 	SHLL	$4, foo+4(SB)
-	SHLL	$4, foo+4(SB):AX
+	SHLL	$4, foo+4(SB):AX // SHLL $4, AX, foo+4(SB)
 
 // LTYPEM spec6	{ outcode(int($1), &$2); }
 	MOVL	AX, BX
@@ -72,15 +76,16 @@ label:
 
 // LTYPEXC spec9	{ outcode(int($1), &$2); }
 	CMPPD	X0, X1, 4
-	CMPPD	X0, foo+4(SB), 4
+	CMPPD	foo+4(SB), X1, 4
 
 // LTYPEX spec10	{ outcode(int($1), &$2); }
 	PINSRD	$1, (AX), X0
 	PINSRD	$2, foo+4(FP), X0
 
 // Was bug: LOOP is a branch instruction.
+	JCS	2(PC)
 loop:
-	LOOP	loop
+	LOOP	loop // LOOP
 
 // LTYPE0 nonnon	{ outcode(int($1), &$2); }
 	RET
diff --git a/src/cmd/asm/internal/asm/testdata/amd64.out b/src/cmd/asm/internal/asm/testdata/amd64.out
deleted file mode 100644
index 850a78e..0000000
--- a/src/cmd/asm/internal/asm/testdata/amd64.out
+++ /dev/null
@@ -1,57 +0,0 @@
-9 00001 (testdata/amd64.s:9)	TEXT	foo(SB), 0, $0
-12 00002 (testdata/amd64.s:12)	NEGQ	R11
-13 00003 (testdata/amd64.s:13)	NEGQ	4(R11)
-14 00004 (testdata/amd64.s:14)	NEGQ	foo+4(SB)
-17 00005 (testdata/amd64.s:17)	INT	$4
-18 00006 (testdata/amd64.s:18)	DIVB	R11
-19 00007 (testdata/amd64.s:19)	DIVB	4(R11)
-20 00008 (testdata/amd64.s:20)	DIVB	foo+4(SB)
-23 00009 (testdata/amd64.s:23)	SUBQ	$4, DI
-24 00010 (testdata/amd64.s:24)	SUBQ	R11, DI
-25 00011 (testdata/amd64.s:25)	SUBQ	4(R11), DI
-26 00012 (testdata/amd64.s:26)	SUBQ	foo+4(SB), DI
-27 00013 (testdata/amd64.s:27)	SUBQ	$4, 8(R12)
-28 00014 (testdata/amd64.s:28)	SUBQ	R11, 8(R12)
-29 00015 (testdata/amd64.s:29)	SUBQ	R11, foo+4(SB)
-32 00016 (testdata/amd64.s:32)	CMPB	CX, $4
-36 00017 (testdata/amd64.s:36)	JCS	13(PC)
-37 00018 (testdata/amd64.s:37)	JCS	17
-40 00019 (testdata/amd64.s:40)	JMP	15(PC)
-41 00020 (testdata/amd64.s:41)	JMP	17
-42 00021 (testdata/amd64.s:42)	JMP	foo+4(SB)
-43 00022 (testdata/amd64.s:43)	JMP	bar<>+4(SB)
-44 00023 (testdata/amd64.s:44)	JMP	bar<>+4(SB)(R11*4)
-45 00024 (testdata/amd64.s:45)	JMP	4(SP)
-46 00025 (testdata/amd64.s:46)	JMP	(R12)
-48 00026 (testdata/amd64.s:48)	JMP	(R12)(R13*4)
-49 00027 (testdata/amd64.s:49)	JMP	(AX)
-50 00028 (testdata/amd64.s:50)	JMP	(SP)
-52 00029 (testdata/amd64.s:52)	JMP	(AX)(AX*4)
-53 00030 (testdata/amd64.s:53)	JMP	4(SP)
-54 00031 (testdata/amd64.s:54)	JMP	(R12)
-56 00032 (testdata/amd64.s:56)	JMP	(R12)(R13*4)
-57 00033 (testdata/amd64.s:57)	JMP	(AX)
-58 00034 (testdata/amd64.s:58)	JMP	(SP)
-60 00035 (testdata/amd64.s:60)	JMP	(AX)(AX*4)
-61 00036 (testdata/amd64.s:61)	JMP	R13
-64 00037 (testdata/amd64.s:64)	NOP
-65 00038 (testdata/amd64.s:65)	NOP	AX
-66 00039 (testdata/amd64.s:66)	NOP	foo+4(SB)
-69 00040 (testdata/amd64.s:69)	SHLL	R11, R12
-70 00041 (testdata/amd64.s:70)	SHLL	R11, foo+4(SB)
-71 00042 (testdata/amd64.s:71)	SHLL	R11, AX, R11
-74 00043 (testdata/amd64.s:74)	MOVL	AX, R11
-75 00044 (testdata/amd64.s:75)	MOVL	$4, R11
-76 00045 (testdata/amd64.s:76)	MOVL	AX, CS, AX
-79 00046 (testdata/amd64.s:79)	IMULB	$4
-80 00047 (testdata/amd64.s:80)	IMULB	R11
-81 00048 (testdata/amd64.s:81)	IMULB	$4, R11
-82 00049 (testdata/amd64.s:82)	IMULB	R11, R12
-83 00050 (testdata/amd64.s:83)	IMULB	R11, foo+4(SB)
-86 00051 (testdata/amd64.s:86)	CMPPD	R11, R12, 4
-87 00052 (testdata/amd64.s:87)	CMPPD	R11, foo+4(SB), 4
-90 00053 (testdata/amd64.s:90)	PINSRW	$4, R11, AX
-91 00054 (testdata/amd64.s:91)	PINSRW	$4, foo+4(SB), AX
-94 00055 (testdata/amd64.s:94)	RETFL	$4
-98 00056 (testdata/amd64.s:98)	LOOP
-101 00057 (testdata/amd64.s:101)	RET
diff --git a/src/cmd/asm/internal/asm/testdata/amd64.s b/src/cmd/asm/internal/asm/testdata/amd64.s
index 1b32ac4..70e7636 100644
--- a/src/cmd/asm/internal/asm/testdata/amd64.s
+++ b/src/cmd/asm/internal/asm/testdata/amd64.s
@@ -6,7 +6,7 @@
 // the old assembler's (6a's) grammar and hand-writing complete
 // instructions for each rule, to guarantee we cover the same space.
 
-TEXT	foo(SB), 0, $0
+TEXT	foo(SB), 7, $0
 
 // LTYPE1 nonrem	{ outcode($1, &$2); }
 	NEGQ	R11
@@ -33,31 +33,53 @@ TEXT	foo(SB), 0, $0
 
 // LTYPER nonrel	{ outcode($1, &$2); }
 label:
-	JB	-4(PC)
-	JB	label
+	JB	-4(PC) // JCS -4(PC)
+	JB	label // JCS 17
 
 // LTYPEC spec3	{ outcode($1, &$2); }
+	JCS	2(PC)
 	JMP	-4(PC)
-	JMP	label
+	JCS	2(PC)
+	JMP	label // JMP 17
+	JCS	2(PC)
 	JMP	foo+4(SB)
+	JCS	2(PC)
 	JMP	bar<>+4(SB)
+	JCS	2(PC)
 	JMP	bar<>+4(SB)(R11*4)
-	JMP	*4(SP)
-	JMP	*(R12)
-	JMP	*(R12*4)
-	JMP	*(R12)(R13*4)
-	JMP	*(AX)
-	JMP	*(SP)
-	JMP	*(AX*4)
-	JMP	*(AX)(AX*4)
+	JCS	2(PC)
+	JMP	*4(SP) // JMP 4(SP)
+	JCS	2(PC)
+	JMP	*(R12) // JMP (R12)
+	JCS	2(PC)
+//	JMP	*(R12*4) // TODO: This line is silently dropped on the floor!
+	JCS	2(PC)
+	JMP	*(R12)(R13*4) // JMP (R12)(R13*4)
+	JCS	2(PC)
+	JMP	*(AX) // JMP (AX)
+	JCS	2(PC)
+	JMP	*(SP) // JMP (SP)
+	JCS	2(PC)
+//	JMP	*(AX*4) // TODO: This line is silently dropped on the floor!
+	JCS	2(PC)
+	JMP	*(AX)(AX*4) // JMP (AX)(AX*4)
+	JCS	2(PC)
 	JMP	4(SP)
+	JCS	2(PC)
 	JMP	(R12)
-	JMP	(R12*4)
+	JCS	2(PC)
+//	JMP	(R12*4) // TODO: This line is silently dropped on the floor!
+	JCS	2(PC)
 	JMP	(R12)(R13*4)
+	JCS	2(PC)
 	JMP	(AX)
+	JCS	2(PC)
 	JMP	(SP)
-	JMP	(AX*4)
+	JCS	2(PC)
+//	JMP	(AX*4) // TODO: This line is silently dropped on the floor!
+	JCS	2(PC)
 	JMP	(AX)(AX*4)
+	JCS	2(PC)
 	JMP	R13
 
 // LTYPEN spec4	{ outcode($1, &$2); }
@@ -66,36 +88,44 @@ label:
 	NOP	foo+4(SB)
 
 // LTYPES spec5	{ outcode($1, &$2); }
-	SHLL	R11, R12
-	SHLL	R11, foo+4(SB)
-	SHLL	R11, R11:AX // Old syntax, still accepted.
+	SHLL	CX, R12
+	SHLL	CX, foo+4(SB)
+	// Old syntax, still accepted:
+	SHLL	CX, R11:AX // SHLL CX, AX, R11
 
 // LTYPEM spec6	{ outcode($1, &$2); }
 	MOVL	AX, R11
 	MOVL	$4, R11
-	MOVL	AX, AX:CS
+//	MOVL	AX, 0(AX):DS // no longer works - did it ever?
 
 // LTYPEI spec7	{ outcode($1, &$2); }
-	IMULB	$4
-	IMULB	R11
-	IMULB	$4, R11
-	IMULB	R11, R12
-	IMULB	R11, foo+4(SB)
+	IMULB	DX
+	IMULW	DX, BX
+	IMULL	R11, R12
+	IMULQ	foo+4(SB), R11
 
 // LTYPEXC spec8	{ outcode($1, &$2); }
-	CMPPD	R11, R12, 4
-	CMPPD	R11, foo+4(SB), 4
+	CMPPD	X1, X2, 4
+	CMPPD	foo+4(SB), X2, 4
 
 // LTYPEX spec9	{ outcode($1, &$2); }
-	PINSRW	$4, R11, AX
-	PINSRW	$4, foo+4(SB), AX
+	PINSRW	$4, AX, X2
+	PINSRW	$4, foo+4(SB), X2
 
 // LTYPERT spec10	{ outcode($1, &$2); }
+	JCS	2(PC)
 	RETFL	$4
 
 // Was bug: LOOP is a branch instruction.
+	JCS	2(PC)
 loop:
-	LOOP	loop
+	LOOP	loop // LOOP
+
+	// Intel pseudonyms for our own renamings.
+	PADDD	M2, M1 // PADDL M2, M1
+	MOVDQ2Q	X1, M1 // MOVQ X1, M1
+	MOVNTDQ	X1, (AX)	// MOVNTO X1, (AX)
+	MOVOA	(AX), X1	// MOVO (AX), X1
 
 // LTYPE0 nonnon	{ outcode($1, &$2); }
-	RET
+	RET // c3
diff --git a/src/cmd/asm/internal/asm/testdata/amd64enc.s b/src/cmd/asm/internal/asm/testdata/amd64enc.s
new file mode 100644
index 0000000..63fdcac
--- /dev/null
+++ b/src/cmd/asm/internal/asm/testdata/amd64enc.s
@@ -0,0 +1,10682 @@
+// generated by x86test -amd64
+// DO NOT EDIT
+
+TEXT asmtest(SB),7,$0
+	ADCB $7, AL                             // 1407
+	ADCW $61731, AX                         // 661523f1
+	ADCL $4045620583, AX                    // 15674523f1
+	ADCQ $-249346713, AX                    // 4815674523f1
+	ADCW $61731, (BX)                       // 66811323f1
+	ADCW $61731, (R11)                      // 6641811323f1
+	ADCW $61731, DX                         // 6681d223f1
+	ADCW $61731, R11                        // 664181d323f1
+	ADCW $7, (BX)                           // 66831307
+	ADCW $7, (R11)                          // 6641831307
+	ADCW $7, DX                             // 6683d207
+	ADCW $7, R11                            // 664183d307
+	ADCW DX, (BX)                           // 661113
+	ADCW R11, (BX)                          // 6644111b
+	ADCW DX, (R11)                          // 66411113
+	ADCW R11, (R11)                         // 6645111b
+	ADCW DX, DX                             // 6611d2 or 6613d2
+	ADCW R11, DX                            // 664411da or 664113d3
+	ADCW DX, R11                            // 664111d3 or 664413da
+	ADCW R11, R11                           // 664511db or 664513db
+	ADCL $4045620583, (BX)                  // 8113674523f1
+	ADCL $4045620583, (R11)                 // 418113674523f1
+	ADCL $4045620583, DX                    // 81d2674523f1
+	ADCL $4045620583, R11                   // 4181d3674523f1
+	ADCL $7, (BX)                           // 831307
+	ADCL $7, (R11)                          // 41831307
+	ADCL $7, DX                             // 83d207
+	ADCL $7, R11                            // 4183d307
+	ADCL DX, (BX)                           // 1113
+	ADCL R11, (BX)                          // 44111b
+	ADCL DX, (R11)                          // 411113
+	ADCL R11, (R11)                         // 45111b
+	ADCL DX, DX                             // 11d2 or 13d2
+	ADCL R11, DX                            // 4411da or 4113d3
+	ADCL DX, R11                            // 4111d3 or 4413da
+	ADCL R11, R11                           // 4511db or 4513db
+	ADCQ $-249346713, (BX)                  // 488113674523f1
+	ADCQ $-249346713, (R11)                 // 498113674523f1
+	ADCQ $-249346713, DX                    // 4881d2674523f1
+	ADCQ $-249346713, R11                   // 4981d3674523f1
+	ADCQ $7, (BX)                           // 48831307
+	ADCQ $7, (R11)                          // 49831307
+	ADCQ $7, DX                             // 4883d207
+	ADCQ $7, R11                            // 4983d307
+	ADCQ DX, (BX)                           // 481113
+	ADCQ R11, (BX)                          // 4c111b
+	ADCQ DX, (R11)                          // 491113
+	ADCQ R11, (R11)                         // 4d111b
+	ADCQ DX, DX                             // 4811d2 or 4813d2
+	ADCQ R11, DX                            // 4c11da or 4913d3
+	ADCQ DX, R11                            // 4911d3 or 4c13da
+	ADCQ R11, R11                           // 4d11db or 4d13db
+	ADCB $7, (BX)                           // 801307
+	ADCB $7, (R11)                          // 41801307
+	ADCB $7, DL                             // 80d207
+	ADCB $7, R11                            // 4180d307
+	ADCB DL, (BX)                           // 1013
+	ADCB R11, (BX)                          // 44101b
+	ADCB DL, (R11)                          // 411013
+	ADCB R11, (R11)                         // 45101b
+	ADCB DL, DL                             // 10d2 or 12d2
+	ADCB R11, DL                            // 4410da or 4112d3
+	ADCB DL, R11                            // 4110d3 or 4412da
+	ADCB R11, R11                           // 4510db or 4512db
+	ADCW (BX), DX                           // 661313
+	ADCW (R11), DX                          // 66411313
+	ADCW (BX), R11                          // 6644131b
+	ADCW (R11), R11                         // 6645131b
+	ADCL (BX), DX                           // 1313
+	ADCL (R11), DX                          // 411313
+	ADCL (BX), R11                          // 44131b
+	ADCL (R11), R11                         // 45131b
+	ADCQ (BX), DX                           // 481313
+	ADCQ (R11), DX                          // 491313
+	ADCQ (BX), R11                          // 4c131b
+	ADCQ (R11), R11                         // 4d131b
+	//TODO: ADCB (BX), DL                   // 1213
+	//TODO: ADCB (R11), DL                  // 411213
+	//TODO: ADCB (BX), R11                  // 44121b
+	//TODO: ADCB (R11), R11                 // 45121b
+	//TODO: ADCXL (BX), DX                  // 660f38f613
+	//TODO: ADCXL (R11), DX                 // 66410f38f613
+	//TODO: ADCXL DX, DX                    // 660f38f6d2
+	//TODO: ADCXL R11, DX                   // 66410f38f6d3
+	//TODO: ADCXL (BX), R11                 // 66440f38f61b
+	//TODO: ADCXL (R11), R11                // 66450f38f61b
+	//TODO: ADCXL DX, R11                   // 66440f38f6da
+	//TODO: ADCXL R11, R11                  // 66450f38f6db
+	//TODO: ADCXQ (BX), DX                  // 66480f38f613
+	//TODO: ADCXQ (R11), DX                 // 66490f38f613
+	//TODO: ADCXQ DX, DX                    // 66480f38f6d2
+	//TODO: ADCXQ R11, DX                   // 66490f38f6d3
+	//TODO: ADCXQ (BX), R11                 // 664c0f38f61b
+	//TODO: ADCXQ (R11), R11                // 664d0f38f61b
+	//TODO: ADCXQ DX, R11                   // 664c0f38f6da
+	//TODO: ADCXQ R11, R11                  // 664d0f38f6db
+	ADDB $7, AL                             // 0407
+	ADDW $61731, AX                         // 660523f1
+	ADDL $4045620583, AX                    // 05674523f1
+	ADDQ $-249346713, AX                    // 4805674523f1
+	ADDW $61731, (BX)                       // 66810323f1
+	ADDW $61731, (R11)                      // 6641810323f1
+	ADDW $61731, DX                         // 6681c223f1
+	ADDW $61731, R11                        // 664181c323f1
+	ADDW $7, (BX)                           // 66830307
+	ADDW $7, (R11)                          // 6641830307
+	ADDW $7, DX                             // 6683c207
+	ADDW $7, R11                            // 664183c307
+	ADDW DX, (BX)                           // 660113
+	ADDW R11, (BX)                          // 6644011b
+	ADDW DX, (R11)                          // 66410113
+	ADDW R11, (R11)                         // 6645011b
+	ADDW DX, DX                             // 6601d2 or 6603d2
+	ADDW R11, DX                            // 664401da or 664103d3
+	ADDW DX, R11                            // 664101d3 or 664403da
+	ADDW R11, R11                           // 664501db or 664503db
+	ADDL $4045620583, (BX)                  // 8103674523f1
+	ADDL $4045620583, (R11)                 // 418103674523f1
+	ADDL $4045620583, DX                    // 81c2674523f1
+	ADDL $4045620583, R11                   // 4181c3674523f1
+	ADDL $7, (BX)                           // 830307
+	ADDL $7, (R11)                          // 41830307
+	ADDL $7, DX                             // 83c207
+	ADDL $7, R11                            // 4183c307
+	ADDL DX, (BX)                           // 0113
+	ADDL R11, (BX)                          // 44011b
+	ADDL DX, (R11)                          // 410113
+	ADDL R11, (R11)                         // 45011b
+	ADDL DX, DX                             // 01d2 or 03d2
+	ADDL R11, DX                            // 4401da or 4103d3
+	ADDL DX, R11                            // 4101d3 or 4403da
+	ADDL R11, R11                           // 4501db or 4503db
+	ADDQ $-249346713, (BX)                  // 488103674523f1
+	ADDQ $-249346713, (R11)                 // 498103674523f1
+	ADDQ $-249346713, DX                    // 4881c2674523f1
+	ADDQ $-249346713, R11                   // 4981c3674523f1
+	ADDQ $7, (BX)                           // 48830307
+	ADDQ $7, (R11)                          // 49830307
+	ADDQ $7, DX                             // 4883c207
+	ADDQ $7, R11                            // 4983c307
+	ADDQ DX, (BX)                           // 480113
+	ADDQ R11, (BX)                          // 4c011b
+	ADDQ DX, (R11)                          // 490113
+	ADDQ R11, (R11)                         // 4d011b
+	ADDQ DX, DX                             // 4801d2 or 4803d2
+	ADDQ R11, DX                            // 4c01da or 4903d3
+	ADDQ DX, R11                            // 4901d3 or 4c03da
+	ADDQ R11, R11                           // 4d01db or 4d03db
+	ADDB $7, (BX)                           // 800307
+	ADDB $7, (R11)                          // 41800307
+	ADDB $7, DL                             // 80c207
+	ADDB $7, R11                            // 4180c307
+	ADDB DL, (BX)                           // 0013
+	ADDB R11, (BX)                          // 44001b
+	ADDB DL, (R11)                          // 410013
+	ADDB R11, (R11)                         // 45001b
+	ADDB DL, DL                             // 00d2 or 02d2
+	ADDB R11, DL                            // 4400da or 4102d3
+	ADDB DL, R11                            // 4100d3 or 4402da
+	ADDB R11, R11                           // 4500db or 4502db
+	ADDW (BX), DX                           // 660313
+	ADDW (R11), DX                          // 66410313
+	ADDW (BX), R11                          // 6644031b
+	ADDW (R11), R11                         // 6645031b
+	ADDL (BX), DX                           // 0313
+	ADDL (R11), DX                          // 410313
+	ADDL (BX), R11                          // 44031b
+	ADDL (R11), R11                         // 45031b
+	ADDQ (BX), DX                           // 480313
+	ADDQ (R11), DX                          // 490313
+	ADDQ (BX), R11                          // 4c031b
+	ADDQ (R11), R11                         // 4d031b
+	ADDB (BX), DL                           // 0213
+	ADDB (R11), DL                          // 410213
+	ADDB (BX), R11                          // 44021b
+	ADDB (R11), R11                         // 45021b
+	ADDPD (BX), X2                          // 660f5813
+	ADDPD (R11), X2                         // 66410f5813
+	ADDPD X2, X2                            // 660f58d2
+	ADDPD X11, X2                           // 66410f58d3
+	ADDPD (BX), X11                         // 66440f581b
+	ADDPD (R11), X11                        // 66450f581b
+	ADDPD X2, X11                           // 66440f58da
+	ADDPD X11, X11                          // 66450f58db
+	ADDPS (BX), X2                          // 0f5813
+	ADDPS (R11), X2                         // 410f5813
+	ADDPS X2, X2                            // 0f58d2
+	ADDPS X11, X2                           // 410f58d3
+	ADDPS (BX), X11                         // 440f581b
+	ADDPS (R11), X11                        // 450f581b
+	ADDPS X2, X11                           // 440f58da
+	ADDPS X11, X11                          // 450f58db
+	ADDSD (BX), X2                          // f20f5813
+	ADDSD (R11), X2                         // f2410f5813
+	ADDSD X2, X2                            // f20f58d2
+	ADDSD X11, X2                           // f2410f58d3
+	ADDSD (BX), X11                         // f2440f581b
+	ADDSD (R11), X11                        // f2450f581b
+	ADDSD X2, X11                           // f2440f58da
+	ADDSD X11, X11                          // f2450f58db
+	ADDSS (BX), X2                          // f30f5813
+	ADDSS (R11), X2                         // f3410f5813
+	ADDSS X2, X2                            // f30f58d2
+	ADDSS X11, X2                           // f3410f58d3
+	ADDSS (BX), X11                         // f3440f581b
+	ADDSS (R11), X11                        // f3450f581b
+	ADDSS X2, X11                           // f3440f58da
+	ADDSS X11, X11                          // f3450f58db
+	//TODO: ADDSUBPD (BX), X2               // 660fd013
+	//TODO: ADDSUBPD (R11), X2              // 66410fd013
+	//TODO: ADDSUBPD X2, X2                 // 660fd0d2
+	//TODO: ADDSUBPD X11, X2                // 66410fd0d3
+	//TODO: ADDSUBPD (BX), X11              // 66440fd01b
+	//TODO: ADDSUBPD (R11), X11             // 66450fd01b
+	//TODO: ADDSUBPD X2, X11                // 66440fd0da
+	//TODO: ADDSUBPD X11, X11               // 66450fd0db
+	//TODO: ADDSUBPS (BX), X2               // f20fd013
+	//TODO: ADDSUBPS (R11), X2              // f2410fd013
+	//TODO: ADDSUBPS X2, X2                 // f20fd0d2
+	//TODO: ADDSUBPS X11, X2                // f2410fd0d3
+	//TODO: ADDSUBPS (BX), X11              // f2440fd01b
+	//TODO: ADDSUBPS (R11), X11             // f2450fd01b
+	//TODO: ADDSUBPS X2, X11                // f2440fd0da
+	//TODO: ADDSUBPS X11, X11               // f2450fd0db
+	//TODO: ADOXL (BX), DX                  // f30f38f613
+	//TODO: ADOXL (R11), DX                 // f3410f38f613
+	//TODO: ADOXL DX, DX                    // f30f38f6d2
+	//TODO: ADOXL R11, DX                   // f3410f38f6d3
+	//TODO: ADOXL (BX), R11                 // f3440f38f61b
+	//TODO: ADOXL (R11), R11                // f3450f38f61b
+	//TODO: ADOXL DX, R11                   // f3440f38f6da
+	//TODO: ADOXL R11, R11                  // f3450f38f6db
+	//TODO: ADOXQ (BX), DX                  // f3480f38f613
+	//TODO: ADOXQ (R11), DX                 // f3490f38f613
+	//TODO: ADOXQ DX, DX                    // f3480f38f6d2
+	//TODO: ADOXQ R11, DX                   // f3490f38f6d3
+	//TODO: ADOXQ (BX), R11                 // f34c0f38f61b
+	//TODO: ADOXQ (R11), R11                // f34d0f38f61b
+	//TODO: ADOXQ DX, R11                   // f34c0f38f6da
+	//TODO: ADOXQ R11, R11                  // f34d0f38f6db
+	AESDEC (BX), X2                         // 660f38de13
+	AESDEC (R11), X2                        // 66410f38de13
+	AESDEC X2, X2                           // 660f38ded2
+	AESDEC X11, X2                          // 66410f38ded3
+	AESDEC (BX), X11                        // 66440f38de1b
+	AESDEC (R11), X11                       // 66450f38de1b
+	AESDEC X2, X11                          // 66440f38deda
+	AESDEC X11, X11                         // 66450f38dedb
+	AESDECLAST (BX), X2                     // 660f38df13
+	AESDECLAST (R11), X2                    // 66410f38df13
+	AESDECLAST X2, X2                       // 660f38dfd2
+	AESDECLAST X11, X2                      // 66410f38dfd3
+	AESDECLAST (BX), X11                    // 66440f38df1b
+	AESDECLAST (R11), X11                   // 66450f38df1b
+	AESDECLAST X2, X11                      // 66440f38dfda
+	AESDECLAST X11, X11                     // 66450f38dfdb
+	AESENC (BX), X2                         // 660f38dc13
+	AESENC (R11), X2                        // 66410f38dc13
+	AESENC X2, X2                           // 660f38dcd2
+	AESENC X11, X2                          // 66410f38dcd3
+	AESENC (BX), X11                        // 66440f38dc1b
+	AESENC (R11), X11                       // 66450f38dc1b
+	AESENC X2, X11                          // 66440f38dcda
+	AESENC X11, X11                         // 66450f38dcdb
+	AESENCLAST (BX), X2                     // 660f38dd13
+	AESENCLAST (R11), X2                    // 66410f38dd13
+	AESENCLAST X2, X2                       // 660f38ddd2
+	AESENCLAST X11, X2                      // 66410f38ddd3
+	AESENCLAST (BX), X11                    // 66440f38dd1b
+	AESENCLAST (R11), X11                   // 66450f38dd1b
+	AESENCLAST X2, X11                      // 66440f38ddda
+	AESENCLAST X11, X11                     // 66450f38dddb
+	AESIMC (BX), X2                         // 660f38db13
+	AESIMC (R11), X2                        // 66410f38db13
+	AESIMC X2, X2                           // 660f38dbd2
+	AESIMC X11, X2                          // 66410f38dbd3
+	AESIMC (BX), X11                        // 66440f38db1b
+	AESIMC (R11), X11                       // 66450f38db1b
+	AESIMC X2, X11                          // 66440f38dbda
+	AESIMC X11, X11                         // 66450f38dbdb
+	AESKEYGENASSIST $7, (BX), X2            // 660f3adf1307
+	AESKEYGENASSIST $7, (R11), X2           // 66410f3adf1307
+	AESKEYGENASSIST $7, X2, X2              // 660f3adfd207
+	AESKEYGENASSIST $7, X11, X2             // 66410f3adfd307
+	AESKEYGENASSIST $7, (BX), X11           // 66440f3adf1b07
+	AESKEYGENASSIST $7, (R11), X11          // 66450f3adf1b07
+	AESKEYGENASSIST $7, X2, X11             // 66440f3adfda07
+	AESKEYGENASSIST $7, X11, X11            // 66450f3adfdb07
+	ANDB $7, AL                             // 2407
+	ANDW $61731, AX                         // 662523f1
+	ANDL $4045620583, AX                    // 25674523f1
+	ANDQ $-249346713, AX                    // 4825674523f1
+	ANDW $61731, (BX)                       // 66812323f1
+	ANDW $61731, (R11)                      // 6641812323f1
+	ANDW $61731, DX                         // 6681e223f1
+	ANDW $61731, R11                        // 664181e323f1
+	ANDW $7, (BX)                           // 66832307
+	ANDW $7, (R11)                          // 6641832307
+	ANDW $7, DX                             // 6683e207
+	ANDW $7, R11                            // 664183e307
+	ANDW DX, (BX)                           // 662113
+	ANDW R11, (BX)                          // 6644211b
+	ANDW DX, (R11)                          // 66412113
+	ANDW R11, (R11)                         // 6645211b
+	ANDW DX, DX                             // 6621d2 or 6623d2
+	ANDW R11, DX                            // 664421da or 664123d3
+	ANDW DX, R11                            // 664121d3 or 664423da
+	ANDW R11, R11                           // 664521db or 664523db
+	ANDL $4045620583, (BX)                  // 8123674523f1
+	ANDL $4045620583, (R11)                 // 418123674523f1
+	ANDL $4045620583, DX                    // 81e2674523f1
+	ANDL $4045620583, R11                   // 4181e3674523f1
+	ANDL $7, (BX)                           // 832307
+	ANDL $7, (R11)                          // 41832307
+	ANDL $7, DX                             // 83e207
+	ANDL $7, R11                            // 4183e307
+	ANDL DX, (BX)                           // 2113
+	ANDL R11, (BX)                          // 44211b
+	ANDL DX, (R11)                          // 412113
+	ANDL R11, (R11)                         // 45211b
+	ANDL DX, DX                             // 21d2 or 23d2
+	ANDL R11, DX                            // 4421da or 4123d3
+	ANDL DX, R11                            // 4121d3 or 4423da
+	ANDL R11, R11                           // 4521db or 4523db
+	ANDQ $-249346713, (BX)                  // 488123674523f1
+	ANDQ $-249346713, (R11)                 // 498123674523f1
+	ANDQ $-249346713, DX                    // 4881e2674523f1
+	ANDQ $-249346713, R11                   // 4981e3674523f1
+	ANDQ $7, (BX)                           // 48832307
+	ANDQ $7, (R11)                          // 49832307
+	ANDQ $7, DX                             // 4883e207
+	ANDQ $7, R11                            // 4983e307
+	ANDQ DX, (BX)                           // 482113
+	ANDQ R11, (BX)                          // 4c211b
+	ANDQ DX, (R11)                          // 492113
+	ANDQ R11, (R11)                         // 4d211b
+	ANDQ DX, DX                             // 4821d2 or 4823d2
+	ANDQ R11, DX                            // 4c21da or 4923d3
+	ANDQ DX, R11                            // 4921d3 or 4c23da
+	ANDQ R11, R11                           // 4d21db or 4d23db
+	ANDB $7, (BX)                           // 802307
+	ANDB $7, (R11)                          // 41802307
+	ANDB $7, DL                             // 80e207
+	ANDB $7, R11                            // 4180e307
+	ANDB DL, (BX)                           // 2013
+	ANDB R11, (BX)                          // 44201b
+	ANDB DL, (R11)                          // 412013
+	ANDB R11, (R11)                         // 45201b
+	ANDB DL, DL                             // 20d2 or 22d2
+	ANDB R11, DL                            // 4420da or 4122d3
+	ANDB DL, R11                            // 4120d3 or 4422da
+	ANDB R11, R11                           // 4520db or 4522db
+	ANDW (BX), DX                           // 662313
+	ANDW (R11), DX                          // 66412313
+	ANDW (BX), R11                          // 6644231b
+	ANDW (R11), R11                         // 6645231b
+	ANDL (BX), DX                           // 2313
+	ANDL (R11), DX                          // 412313
+	ANDL (BX), R11                          // 44231b
+	ANDL (R11), R11                         // 45231b
+	ANDQ (BX), DX                           // 482313
+	ANDQ (R11), DX                          // 492313
+	ANDQ (BX), R11                          // 4c231b
+	ANDQ (R11), R11                         // 4d231b
+	ANDB (BX), DL                           // 2213
+	ANDB (R11), DL                          // 412213
+	ANDB (BX), R11                          // 44221b
+	ANDB (R11), R11                         // 45221b
+	ANDNL (BX), R9, DX                      // c4e230f213
+	ANDNL (R11), R9, DX                     // c4c230f213
+	ANDNL DX, R9, DX                        // c4e230f2d2
+	ANDNL R11, R9, DX                       // c4c230f2d3
+	ANDNL (BX), R9, R11                     // c46230f21b
+	ANDNL (R11), R9, R11                    // c44230f21b
+	ANDNL DX, R9, R11                       // c46230f2da
+	ANDNL R11, R9, R11                      // c44230f2db
+	ANDNQ (BX), R14, DX                     // c4e288f213
+	ANDNQ (R11), R14, DX                    // c4c288f213
+	ANDNQ DX, R14, DX                       // c4e288f2d2
+	ANDNQ R11, R14, DX                      // c4c288f2d3
+	ANDNQ (BX), R14, R11                    // c46288f21b
+	ANDNQ (R11), R14, R11                   // c44288f21b
+	ANDNQ DX, R14, R11                      // c46288f2da
+	ANDNQ R11, R14, R11                     // c44288f2db
+	ANDNPD (BX), X2                         // 660f5513
+	ANDNPD (R11), X2                        // 66410f5513
+	ANDNPD X2, X2                           // 660f55d2
+	ANDNPD X11, X2                          // 66410f55d3
+	ANDNPD (BX), X11                        // 66440f551b
+	ANDNPD (R11), X11                       // 66450f551b
+	ANDNPD X2, X11                          // 66440f55da
+	ANDNPD X11, X11                         // 66450f55db
+	ANDNPS (BX), X2                         // 0f5513
+	ANDNPS (R11), X2                        // 410f5513
+	ANDNPS X2, X2                           // 0f55d2
+	ANDNPS X11, X2                          // 410f55d3
+	ANDNPS (BX), X11                        // 440f551b
+	ANDNPS (R11), X11                       // 450f551b
+	ANDNPS X2, X11                          // 440f55da
+	ANDNPS X11, X11                         // 450f55db
+	ANDPD (BX), X2                          // 660f5413
+	ANDPD (R11), X2                         // 66410f5413
+	ANDPD X2, X2                            // 660f54d2
+	ANDPD X11, X2                           // 66410f54d3
+	ANDPD (BX), X11                         // 66440f541b
+	ANDPD (R11), X11                        // 66450f541b
+	ANDPD X2, X11                           // 66440f54da
+	ANDPD X11, X11                          // 66450f54db
+	//TODO: ANDPS (BX), X2                  // 0f5413
+	//TODO: ANDPS (R11), X2                 // 410f5413
+	//TODO: ANDPS X2, X2                    // 0f54d2
+	//TODO: ANDPS X11, X2                   // 410f54d3
+	//TODO: ANDPS (BX), X11                 // 440f541b
+	//TODO: ANDPS (R11), X11                // 450f541b
+	//TODO: ANDPS X2, X11                   // 440f54da
+	//TODO: ANDPS X11, X11                  // 450f54db
+	BEXTRL R9, (BX), DX                     // c4e230f713
+	BEXTRL R9, (R11), DX                    // c4c230f713
+	BEXTRL R9, DX, DX                       // c4e230f7d2
+	BEXTRL R9, R11, DX                      // c4c230f7d3
+	BEXTRL R9, (BX), R11                    // c46230f71b
+	BEXTRL R9, (R11), R11                   // c44230f71b
+	BEXTRL R9, DX, R11                      // c46230f7da
+	BEXTRL R9, R11, R11                     // c44230f7db
+	BEXTRQ R14, (BX), DX                    // c4e288f713
+	BEXTRQ R14, (R11), DX                   // c4c288f713
+	BEXTRQ R14, DX, DX                      // c4e288f7d2
+	BEXTRQ R14, R11, DX                     // c4c288f7d3
+	BEXTRQ R14, (BX), R11                   // c46288f71b
+	BEXTRQ R14, (R11), R11                  // c44288f71b
+	BEXTRQ R14, DX, R11                     // c46288f7da
+	BEXTRQ R14, R11, R11                    // c44288f7db
+	//TODO: BLENDPD $7, (BX), X2            // 660f3a0d1307
+	//TODO: BLENDPD $7, (R11), X2           // 66410f3a0d1307
+	//TODO: BLENDPD $7, X2, X2              // 660f3a0dd207
+	//TODO: BLENDPD $7, X11, X2             // 66410f3a0dd307
+	//TODO: BLENDPD $7, (BX), X11           // 66440f3a0d1b07
+	//TODO: BLENDPD $7, (R11), X11          // 66450f3a0d1b07
+	//TODO: BLENDPD $7, X2, X11             // 66440f3a0dda07
+	//TODO: BLENDPD $7, X11, X11            // 66450f3a0ddb07
+	//TODO: BLENDPS $7, (BX), X2            // 660f3a0c1307
+	//TODO: BLENDPS $7, (R11), X2           // 66410f3a0c1307
+	//TODO: BLENDPS $7, X2, X2              // 660f3a0cd207
+	//TODO: BLENDPS $7, X11, X2             // 66410f3a0cd307
+	//TODO: BLENDPS $7, (BX), X11           // 66440f3a0c1b07
+	//TODO: BLENDPS $7, (R11), X11          // 66450f3a0c1b07
+	//TODO: BLENDPS $7, X2, X11             // 66440f3a0cda07
+	//TODO: BLENDPS $7, X11, X11            // 66450f3a0cdb07
+	//TODO: BLENDVPD XMM0, (BX), X2         // 660f381513
+	//TODO: BLENDVPD XMM0, (R11), X2        // 66410f381513
+	//TODO: BLENDVPD XMM0, X2, X2           // 660f3815d2
+	//TODO: BLENDVPD XMM0, X11, X2          // 66410f3815d3
+	//TODO: BLENDVPD XMM0, (BX), X11        // 66440f38151b
+	//TODO: BLENDVPD XMM0, (R11), X11       // 66450f38151b
+	//TODO: BLENDVPD XMM0, X2, X11          // 66440f3815da
+	//TODO: BLENDVPD XMM0, X11, X11         // 66450f3815db
+	//TODO: BLENDVPS XMM0, (BX), X2         // 660f381413
+	//TODO: BLENDVPS XMM0, (R11), X2        // 66410f381413
+	//TODO: BLENDVPS XMM0, X2, X2           // 660f3814d2
+	//TODO: BLENDVPS XMM0, X11, X2          // 66410f3814d3
+	//TODO: BLENDVPS XMM0, (BX), X11        // 66440f38141b
+	//TODO: BLENDVPS XMM0, (R11), X11       // 66450f38141b
+	//TODO: BLENDVPS XMM0, X2, X11          // 66440f3814da
+	//TODO: BLENDVPS XMM0, X11, X11         // 66450f3814db
+	//TODO: BLSIL (BX), R9                  // c4e230f31b
+	//TODO: BLSIL (R11), R9                 // c4c230f31b
+	//TODO: BLSIL DX, R9                    // c4e230f3da
+	//TODO: BLSIL R11, R9                   // c4c230f3db
+	//TODO: BLSIQ (BX), R14                 // c4e288f31b
+	//TODO: BLSIQ (R11), R14                // c4c288f31b
+	//TODO: BLSIQ DX, R14                   // c4e288f3da
+	//TODO: BLSIQ R11, R14                  // c4c288f3db
+	//TODO: BLSMSKL (BX), R9                // c4e230f313
+	//TODO: BLSMSKL (R11), R9               // c4c230f313
+	//TODO: BLSMSKL DX, R9                  // c4e230f3d2
+	//TODO: BLSMSKL R11, R9                 // c4c230f3d3
+	//TODO: BLSMSKQ (BX), R14               // c4e288f313
+	//TODO: BLSMSKQ (R11), R14              // c4c288f313
+	//TODO: BLSMSKQ DX, R14                 // c4e288f3d2
+	//TODO: BLSMSKQ R11, R14                // c4c288f3d3
+	//TODO: BLSRL (BX), R9                  // c4e230f30b
+	//TODO: BLSRL (R11), R9                 // c4c230f30b
+	//TODO: BLSRL DX, R9                    // c4e230f3ca
+	//TODO: BLSRL R11, R9                   // c4c230f3cb
+	//TODO: BLSRQ (BX), R14                 // c4e288f30b
+	//TODO: BLSRQ (R11), R14                // c4c288f30b
+	//TODO: BLSRQ DX, R14                   // c4e288f3ca
+	//TODO: BLSRQ R11, R14                  // c4c288f3cb
+	//TODO: BNDCL (BX), BND2                // f30f1a13
+	//TODO: BNDCL (R11), BND2               // f3410f1a13
+	//TODO: BNDCL DX, BND2                  // f30f1ad2
+	//TODO: BNDCL R11, BND2                 // f3410f1ad3
+	//TODO: BNDCL (BX), BND3                // f30f1a1b
+	//TODO: BNDCL (R11), BND3               // f3410f1a1b
+	//TODO: BNDCL DX, BND3                  // f30f1ada
+	//TODO: BNDCL R11, BND3                 // f3410f1adb
+	//TODO: BNDCN (BX), BND2                // f20f1b13
+	//TODO: BNDCN (R11), BND2               // f2410f1b13
+	//TODO: BNDCN DX, BND2                  // f20f1bd2
+	//TODO: BNDCN R11, BND2                 // f2410f1bd3
+	//TODO: BNDCN (BX), BND3                // f20f1b1b
+	//TODO: BNDCN (R11), BND3               // f2410f1b1b
+	//TODO: BNDCN DX, BND3                  // f20f1bda
+	//TODO: BNDCN R11, BND3                 // f2410f1bdb
+	//TODO: BNDCU (BX), BND2                // f20f1a13
+	//TODO: BNDCU (R11), BND2               // f2410f1a13
+	//TODO: BNDCU DX, BND2                  // f20f1ad2
+	//TODO: BNDCU R11, BND2                 // f2410f1ad3
+	//TODO: BNDCU (BX), BND3                // f20f1a1b
+	//TODO: BNDCU (R11), BND3               // f2410f1a1b
+	//TODO: BNDCU DX, BND3                  // f20f1ada
+	//TODO: BNDCU R11, BND3                 // f2410f1adb
+	//TODO: BNDLDX (BX), BND2               // 0f1a13
+	//TODO: BNDLDX (R11), BND2              // 410f1a13
+	//TODO: BNDLDX (BX), BND3               // 0f1a1b
+	//TODO: BNDLDX (R11), BND3              // 410f1a1b
+	//TODO: BNDMK (BX), BND2                // f30f1b13
+	//TODO: BNDMK (R11), BND2               // f3410f1b13
+	//TODO: BNDMK (BX), BND3                // f30f1b1b
+	//TODO: BNDMK (R11), BND3               // f3410f1b1b
+	//TODO: BNDMOV (BX), BND2               // 660f1a13
+	//TODO: BNDMOV (R11), BND2              // 66410f1a13
+	//TODO: BNDMOV BND2, BND2               // 660f1ad2 or 660f1bd2
+	//TODO: BNDMOV BND3, BND2               // 660f1ad3 or 660f1bda
+	//TODO: BNDMOV (BX), BND3               // 660f1a1b
+	//TODO: BNDMOV (R11), BND3              // 66410f1a1b
+	//TODO: BNDMOV BND2, BND3               // 660f1ada or 660f1bd3
+	//TODO: BNDMOV BND3, BND3               // 660f1adb or 660f1bdb
+	//TODO: BNDMOV BND2, (BX)               // 660f1b13
+	//TODO: BNDMOV BND3, (BX)               // 660f1b1b
+	//TODO: BNDMOV BND2, (R11)              // 66410f1b13
+	//TODO: BNDMOV BND3, (R11)              // 66410f1b1b
+	//TODO: BNDSTX BND2, (BX)               // 0f1b13
+	//TODO: BNDSTX BND3, (BX)               // 0f1b1b
+	//TODO: BNDSTX BND2, (R11)              // 410f1b13
+	//TODO: BNDSTX BND3, (R11)              // 410f1b1b
+	BSFW (BX), DX                           // 660fbc13
+	BSFW (R11), DX                          // 66410fbc13
+	BSFW DX, DX                             // 660fbcd2
+	BSFW R11, DX                            // 66410fbcd3
+	BSFW (BX), R11                          // 66440fbc1b
+	BSFW (R11), R11                         // 66450fbc1b
+	BSFW DX, R11                            // 66440fbcda
+	BSFW R11, R11                           // 66450fbcdb
+	BSFL (BX), DX                           // 0fbc13
+	BSFL (R11), DX                          // 410fbc13
+	BSFL DX, DX                             // 0fbcd2
+	BSFL R11, DX                            // 410fbcd3
+	BSFL (BX), R11                          // 440fbc1b
+	BSFL (R11), R11                         // 450fbc1b
+	BSFL DX, R11                            // 440fbcda
+	BSFL R11, R11                           // 450fbcdb
+	BSFQ (BX), DX                           // 480fbc13
+	BSFQ (R11), DX                          // 490fbc13
+	BSFQ DX, DX                             // 480fbcd2
+	BSFQ R11, DX                            // 490fbcd3
+	BSFQ (BX), R11                          // 4c0fbc1b
+	BSFQ (R11), R11                         // 4d0fbc1b
+	BSFQ DX, R11                            // 4c0fbcda
+	BSFQ R11, R11                           // 4d0fbcdb
+	BSRW (BX), DX                           // 660fbd13
+	BSRW (R11), DX                          // 66410fbd13
+	BSRW DX, DX                             // 660fbdd2
+	BSRW R11, DX                            // 66410fbdd3
+	BSRW (BX), R11                          // 66440fbd1b
+	BSRW (R11), R11                         // 66450fbd1b
+	BSRW DX, R11                            // 66440fbdda
+	BSRW R11, R11                           // 66450fbddb
+	BSRL (BX), DX                           // 0fbd13
+	BSRL (R11), DX                          // 410fbd13
+	BSRL DX, DX                             // 0fbdd2
+	BSRL R11, DX                            // 410fbdd3
+	BSRL (BX), R11                          // 440fbd1b
+	BSRL (R11), R11                         // 450fbd1b
+	BSRL DX, R11                            // 440fbdda
+	BSRL R11, R11                           // 450fbddb
+	BSRQ (BX), DX                           // 480fbd13
+	BSRQ (R11), DX                          // 490fbd13
+	BSRQ DX, DX                             // 480fbdd2
+	BSRQ R11, DX                            // 490fbdd3
+	BSRQ (BX), R11                          // 4c0fbd1b
+	BSRQ (R11), R11                         // 4d0fbd1b
+	BSRQ DX, R11                            // 4c0fbdda
+	BSRQ R11, R11                           // 4d0fbddb
+	//TODO: BSWAPW DX                       // 660fca
+	//TODO: BSWAPW R11                      // 66410fcb
+	BSWAPL DX                               // 0fca
+	BSWAPL R11                              // 410fcb
+	BSWAPQ DX                               // 480fca
+	BSWAPQ R11                              // 490fcb
+	BTW $7, (BX)                            // 660fba2307
+	BTW $7, (R11)                           // 66410fba2307
+	BTW $7, DX                              // 660fbae207
+	BTW $7, R11                             // 66410fbae307
+	BTW DX, (BX)                            // 660fa313
+	BTW R11, (BX)                           // 66440fa31b
+	BTW DX, (R11)                           // 66410fa313
+	BTW R11, (R11)                          // 66450fa31b
+	BTW DX, DX                              // 660fa3d2
+	BTW R11, DX                             // 66440fa3da
+	BTW DX, R11                             // 66410fa3d3
+	BTW R11, R11                            // 66450fa3db
+	BTL $7, (BX)                            // 0fba2307
+	BTL $7, (R11)                           // 410fba2307
+	BTL $7, DX                              // 0fbae207
+	BTL $7, R11                             // 410fbae307
+	BTL DX, (BX)                            // 0fa313
+	BTL R11, (BX)                           // 440fa31b
+	BTL DX, (R11)                           // 410fa313
+	BTL R11, (R11)                          // 450fa31b
+	BTL DX, DX                              // 0fa3d2
+	BTL R11, DX                             // 440fa3da
+	BTL DX, R11                             // 410fa3d3
+	BTL R11, R11                            // 450fa3db
+	BTQ $7, (BX)                            // 480fba2307
+	BTQ $7, (R11)                           // 490fba2307
+	BTQ $7, DX                              // 480fbae207
+	BTQ $7, R11                             // 490fbae307
+	BTQ DX, (BX)                            // 480fa313
+	BTQ R11, (BX)                           // 4c0fa31b
+	BTQ DX, (R11)                           // 490fa313
+	BTQ R11, (R11)                          // 4d0fa31b
+	BTQ DX, DX                              // 480fa3d2
+	BTQ R11, DX                             // 4c0fa3da
+	BTQ DX, R11                             // 490fa3d3
+	BTQ R11, R11                            // 4d0fa3db
+	BTCW $7, (BX)                           // 660fba3b07
+	BTCW $7, (R11)                          // 66410fba3b07
+	BTCW $7, DX                             // 660fbafa07
+	BTCW $7, R11                            // 66410fbafb07
+	BTCW DX, (BX)                           // 660fbb13
+	BTCW R11, (BX)                          // 66440fbb1b
+	BTCW DX, (R11)                          // 66410fbb13
+	BTCW R11, (R11)                         // 66450fbb1b
+	BTCW DX, DX                             // 660fbbd2
+	BTCW R11, DX                            // 66440fbbda
+	BTCW DX, R11                            // 66410fbbd3
+	BTCW R11, R11                           // 66450fbbdb
+	BTCL $7, (BX)                           // 0fba3b07
+	BTCL $7, (R11)                          // 410fba3b07
+	BTCL $7, DX                             // 0fbafa07
+	BTCL $7, R11                            // 410fbafb07
+	BTCL DX, (BX)                           // 0fbb13
+	BTCL R11, (BX)                          // 440fbb1b
+	BTCL DX, (R11)                          // 410fbb13
+	BTCL R11, (R11)                         // 450fbb1b
+	BTCL DX, DX                             // 0fbbd2
+	BTCL R11, DX                            // 440fbbda
+	BTCL DX, R11                            // 410fbbd3
+	BTCL R11, R11                           // 450fbbdb
+	BTCQ $7, (BX)                           // 480fba3b07
+	BTCQ $7, (R11)                          // 490fba3b07
+	BTCQ $7, DX                             // 480fbafa07
+	BTCQ $7, R11                            // 490fbafb07
+	BTCQ DX, (BX)                           // 480fbb13
+	BTCQ R11, (BX)                          // 4c0fbb1b
+	BTCQ DX, (R11)                          // 490fbb13
+	BTCQ R11, (R11)                         // 4d0fbb1b
+	BTCQ DX, DX                             // 480fbbd2
+	BTCQ R11, DX                            // 4c0fbbda
+	BTCQ DX, R11                            // 490fbbd3
+	BTCQ R11, R11                           // 4d0fbbdb
+	BTRW $7, (BX)                           // 660fba3307
+	BTRW $7, (R11)                          // 66410fba3307
+	BTRW $7, DX                             // 660fbaf207
+	BTRW $7, R11                            // 66410fbaf307
+	BTRW DX, (BX)                           // 660fb313
+	BTRW R11, (BX)                          // 66440fb31b
+	BTRW DX, (R11)                          // 66410fb313
+	BTRW R11, (R11)                         // 66450fb31b
+	BTRW DX, DX                             // 660fb3d2
+	BTRW R11, DX                            // 66440fb3da
+	BTRW DX, R11                            // 66410fb3d3
+	BTRW R11, R11                           // 66450fb3db
+	BTRL $7, (BX)                           // 0fba3307
+	BTRL $7, (R11)                          // 410fba3307
+	BTRL $7, DX                             // 0fbaf207
+	BTRL $7, R11                            // 410fbaf307
+	BTRL DX, (BX)                           // 0fb313
+	BTRL R11, (BX)                          // 440fb31b
+	BTRL DX, (R11)                          // 410fb313
+	BTRL R11, (R11)                         // 450fb31b
+	BTRL DX, DX                             // 0fb3d2
+	BTRL R11, DX                            // 440fb3da
+	BTRL DX, R11                            // 410fb3d3
+	BTRL R11, R11                           // 450fb3db
+	BTRQ $7, (BX)                           // 480fba3307
+	BTRQ $7, (R11)                          // 490fba3307
+	BTRQ $7, DX                             // 480fbaf207
+	BTRQ $7, R11                            // 490fbaf307
+	BTRQ DX, (BX)                           // 480fb313
+	BTRQ R11, (BX)                          // 4c0fb31b
+	BTRQ DX, (R11)                          // 490fb313
+	BTRQ R11, (R11)                         // 4d0fb31b
+	BTRQ DX, DX                             // 480fb3d2
+	BTRQ R11, DX                            // 4c0fb3da
+	BTRQ DX, R11                            // 490fb3d3
+	BTRQ R11, R11                           // 4d0fb3db
+	BTSW $7, (BX)                           // 660fba2b07
+	BTSW $7, (R11)                          // 66410fba2b07
+	BTSW $7, DX                             // 660fbaea07
+	BTSW $7, R11                            // 66410fbaeb07
+	BTSW DX, (BX)                           // 660fab13
+	BTSW R11, (BX)                          // 66440fab1b
+	BTSW DX, (R11)                          // 66410fab13
+	BTSW R11, (R11)                         // 66450fab1b
+	BTSW DX, DX                             // 660fabd2
+	BTSW R11, DX                            // 66440fabda
+	BTSW DX, R11                            // 66410fabd3
+	BTSW R11, R11                           // 66450fabdb
+	BTSL $7, (BX)                           // 0fba2b07
+	BTSL $7, (R11)                          // 410fba2b07
+	BTSL $7, DX                             // 0fbaea07
+	BTSL $7, R11                            // 410fbaeb07
+	BTSL DX, (BX)                           // 0fab13
+	BTSL R11, (BX)                          // 440fab1b
+	BTSL DX, (R11)                          // 410fab13
+	BTSL R11, (R11)                         // 450fab1b
+	BTSL DX, DX                             // 0fabd2
+	BTSL R11, DX                            // 440fabda
+	BTSL DX, R11                            // 410fabd3
+	BTSL R11, R11                           // 450fabdb
+	BTSQ $7, (BX)                           // 480fba2b07
+	BTSQ $7, (R11)                          // 490fba2b07
+	BTSQ $7, DX                             // 480fbaea07
+	BTSQ $7, R11                            // 490fbaeb07
+	BTSQ DX, (BX)                           // 480fab13
+	BTSQ R11, (BX)                          // 4c0fab1b
+	BTSQ DX, (R11)                          // 490fab13
+	BTSQ R11, (R11)                         // 4d0fab1b
+	BTSQ DX, DX                             // 480fabd2
+	BTSQ R11, DX                            // 4c0fabda
+	BTSQ DX, R11                            // 490fabd3
+	BTSQ R11, R11                           // 4d0fabdb
+	BZHIL R9, (BX), DX                      // c4e230f513
+	BZHIL R9, (R11), DX                     // c4c230f513
+	BZHIL R9, DX, DX                        // c4e230f5d2
+	BZHIL R9, R11, DX                       // c4c230f5d3
+	BZHIL R9, (BX), R11                     // c46230f51b
+	BZHIL R9, (R11), R11                    // c44230f51b
+	BZHIL R9, DX, R11                       // c46230f5da
+	BZHIL R9, R11, R11                      // c44230f5db
+	BZHIQ R14, (BX), DX                     // c4e288f513
+	BZHIQ R14, (R11), DX                    // c4c288f513
+	BZHIQ R14, DX, DX                       // c4e288f5d2
+	BZHIQ R14, R11, DX                      // c4c288f5d3
+	BZHIQ R14, (BX), R11                    // c46288f51b
+	BZHIQ R14, (R11), R11                   // c44288f51b
+	BZHIQ R14, DX, R11                      // c46288f5da
+	BZHIQ R14, R11, R11                     // c44288f5db
+	//TODO: CALLQ* (BX)                     // ff13
+	//TODO: CALLQ* (R11)                    // 41ff13
+	//TODO: CALLQ* DX                       // ffd2
+	//TODO: CALLQ* R11                      // 41ffd3
+	//TODO: CALL .+$0x11223344              // e844332211 or 48e844332211
+	//TODO: LCALLW* (BX)                    // 66ff1b
+	//TODO: LCALLW* (R11)                   // 6641ff1b
+	//TODO: LCALLL* (BX)                    // ff1b
+	//TODO: LCALLL* (R11)                   // 41ff1b
+	//TODO: LCALLQ* (BX)                    // 48ff1b
+	//TODO: LCALLQ* (R11)                   // 49ff1b
+	//TODO: CBW                             // 6698
+	CDQ                                     // 99
+	//TODO: CDQE                            // 4898
+	//TODO: CLAC                            // 0f01ca
+	CLC                                     // f8
+	CLD                                     // fc
+	//TODO: CLFLUSH (BX)                    // 0fae3b
+	//TODO: CLFLUSH (R11)                   // 410fae3b
+	//TODO: CLFLUSHOPT (BX)                 // 660fae3b
+	//TODO: CLFLUSHOPT (R11)                // 66410fae3b
+	CLI                                     // fa
+	CLTS                                    // 0f06
+	CMC                                     // f5
+	CMOVWHI (BX), DX                        // 660f4713
+	CMOVWHI (R11), DX                       // 66410f4713
+	CMOVWHI DX, DX                          // 660f47d2
+	CMOVWHI R11, DX                         // 66410f47d3
+	CMOVWHI (BX), R11                       // 66440f471b
+	CMOVWHI (R11), R11                      // 66450f471b
+	CMOVWHI DX, R11                         // 66440f47da
+	CMOVWHI R11, R11                        // 66450f47db
+	CMOVLHI (BX), DX                        // 0f4713
+	CMOVLHI (R11), DX                       // 410f4713
+	CMOVLHI DX, DX                          // 0f47d2
+	CMOVLHI R11, DX                         // 410f47d3
+	CMOVLHI (BX), R11                       // 440f471b
+	CMOVLHI (R11), R11                      // 450f471b
+	CMOVLHI DX, R11                         // 440f47da
+	CMOVLHI R11, R11                        // 450f47db
+	CMOVQHI (BX), DX                        // 480f4713
+	CMOVQHI (R11), DX                       // 490f4713
+	CMOVQHI DX, DX                          // 480f47d2
+	CMOVQHI R11, DX                         // 490f47d3
+	CMOVQHI (BX), R11                       // 4c0f471b
+	CMOVQHI (R11), R11                      // 4d0f471b
+	CMOVQHI DX, R11                         // 4c0f47da
+	CMOVQHI R11, R11                        // 4d0f47db
+	CMOVWCC (BX), DX                        // 660f4313
+	CMOVWCC (R11), DX                       // 66410f4313
+	CMOVWCC DX, DX                          // 660f43d2
+	CMOVWCC R11, DX                         // 66410f43d3
+	CMOVWCC (BX), R11                       // 66440f431b
+	CMOVWCC (R11), R11                      // 66450f431b
+	CMOVWCC DX, R11                         // 66440f43da
+	CMOVWCC R11, R11                        // 66450f43db
+	CMOVLCC (BX), DX                        // 0f4313
+	CMOVLCC (R11), DX                       // 410f4313
+	CMOVLCC DX, DX                          // 0f43d2
+	CMOVLCC R11, DX                         // 410f43d3
+	CMOVLCC (BX), R11                       // 440f431b
+	CMOVLCC (R11), R11                      // 450f431b
+	CMOVLCC DX, R11                         // 440f43da
+	CMOVLCC R11, R11                        // 450f43db
+	CMOVQCC (BX), DX                        // 480f4313
+	CMOVQCC (R11), DX                       // 490f4313
+	CMOVQCC DX, DX                          // 480f43d2
+	CMOVQCC R11, DX                         // 490f43d3
+	CMOVQCC (BX), R11                       // 4c0f431b
+	CMOVQCC (R11), R11                      // 4d0f431b
+	CMOVQCC DX, R11                         // 4c0f43da
+	CMOVQCC R11, R11                        // 4d0f43db
+	CMOVWCS (BX), DX                        // 660f4213
+	CMOVWCS (R11), DX                       // 66410f4213
+	CMOVWCS DX, DX                          // 660f42d2
+	CMOVWCS R11, DX                         // 66410f42d3
+	CMOVWCS (BX), R11                       // 66440f421b
+	CMOVWCS (R11), R11                      // 66450f421b
+	CMOVWCS DX, R11                         // 66440f42da
+	CMOVWCS R11, R11                        // 66450f42db
+	CMOVLCS (BX), DX                        // 0f4213
+	CMOVLCS (R11), DX                       // 410f4213
+	CMOVLCS DX, DX                          // 0f42d2
+	CMOVLCS R11, DX                         // 410f42d3
+	CMOVLCS (BX), R11                       // 440f421b
+	CMOVLCS (R11), R11                      // 450f421b
+	CMOVLCS DX, R11                         // 440f42da
+	CMOVLCS R11, R11                        // 450f42db
+	CMOVQCS (BX), DX                        // 480f4213
+	CMOVQCS (R11), DX                       // 490f4213
+	CMOVQCS DX, DX                          // 480f42d2
+	CMOVQCS R11, DX                         // 490f42d3
+	CMOVQCS (BX), R11                       // 4c0f421b
+	CMOVQCS (R11), R11                      // 4d0f421b
+	CMOVQCS DX, R11                         // 4c0f42da
+	CMOVQCS R11, R11                        // 4d0f42db
+	CMOVWLS (BX), DX                        // 660f4613
+	CMOVWLS (R11), DX                       // 66410f4613
+	CMOVWLS DX, DX                          // 660f46d2
+	CMOVWLS R11, DX                         // 66410f46d3
+	CMOVWLS (BX), R11                       // 66440f461b
+	CMOVWLS (R11), R11                      // 66450f461b
+	CMOVWLS DX, R11                         // 66440f46da
+	CMOVWLS R11, R11                        // 66450f46db
+	CMOVLLS (BX), DX                        // 0f4613
+	CMOVLLS (R11), DX                       // 410f4613
+	CMOVLLS DX, DX                          // 0f46d2
+	CMOVLLS R11, DX                         // 410f46d3
+	CMOVLLS (BX), R11                       // 440f461b
+	CMOVLLS (R11), R11                      // 450f461b
+	CMOVLLS DX, R11                         // 440f46da
+	CMOVLLS R11, R11                        // 450f46db
+	CMOVQLS (BX), DX                        // 480f4613
+	CMOVQLS (R11), DX                       // 490f4613
+	CMOVQLS DX, DX                          // 480f46d2
+	CMOVQLS R11, DX                         // 490f46d3
+	CMOVQLS (BX), R11                       // 4c0f461b
+	CMOVQLS (R11), R11                      // 4d0f461b
+	CMOVQLS DX, R11                         // 4c0f46da
+	CMOVQLS R11, R11                        // 4d0f46db
+	CMOVWEQ (BX), DX                        // 660f4413
+	CMOVWEQ (R11), DX                       // 66410f4413
+	CMOVWEQ DX, DX                          // 660f44d2
+	CMOVWEQ R11, DX                         // 66410f44d3
+	CMOVWEQ (BX), R11                       // 66440f441b
+	CMOVWEQ (R11), R11                      // 66450f441b
+	CMOVWEQ DX, R11                         // 66440f44da
+	CMOVWEQ R11, R11                        // 66450f44db
+	CMOVLEQ (BX), DX                        // 0f4413
+	CMOVLEQ (R11), DX                       // 410f4413
+	CMOVLEQ DX, DX                          // 0f44d2
+	CMOVLEQ R11, DX                         // 410f44d3
+	CMOVLEQ (BX), R11                       // 440f441b
+	CMOVLEQ (R11), R11                      // 450f441b
+	CMOVLEQ DX, R11                         // 440f44da
+	CMOVLEQ R11, R11                        // 450f44db
+	CMOVQEQ (BX), DX                        // 480f4413
+	CMOVQEQ (R11), DX                       // 490f4413
+	CMOVQEQ DX, DX                          // 480f44d2
+	CMOVQEQ R11, DX                         // 490f44d3
+	CMOVQEQ (BX), R11                       // 4c0f441b
+	CMOVQEQ (R11), R11                      // 4d0f441b
+	CMOVQEQ DX, R11                         // 4c0f44da
+	CMOVQEQ R11, R11                        // 4d0f44db
+	CMOVWGT (BX), DX                        // 660f4f13
+	CMOVWGT (R11), DX                       // 66410f4f13
+	CMOVWGT DX, DX                          // 660f4fd2
+	CMOVWGT R11, DX                         // 66410f4fd3
+	CMOVWGT (BX), R11                       // 66440f4f1b
+	CMOVWGT (R11), R11                      // 66450f4f1b
+	CMOVWGT DX, R11                         // 66440f4fda
+	CMOVWGT R11, R11                        // 66450f4fdb
+	CMOVLGT (BX), DX                        // 0f4f13
+	CMOVLGT (R11), DX                       // 410f4f13
+	CMOVLGT DX, DX                          // 0f4fd2
+	CMOVLGT R11, DX                         // 410f4fd3
+	CMOVLGT (BX), R11                       // 440f4f1b
+	CMOVLGT (R11), R11                      // 450f4f1b
+	CMOVLGT DX, R11                         // 440f4fda
+	CMOVLGT R11, R11                        // 450f4fdb
+	CMOVQGT (BX), DX                        // 480f4f13
+	CMOVQGT (R11), DX                       // 490f4f13
+	CMOVQGT DX, DX                          // 480f4fd2
+	CMOVQGT R11, DX                         // 490f4fd3
+	CMOVQGT (BX), R11                       // 4c0f4f1b
+	CMOVQGT (R11), R11                      // 4d0f4f1b
+	CMOVQGT DX, R11                         // 4c0f4fda
+	CMOVQGT R11, R11                        // 4d0f4fdb
+	CMOVWGE (BX), DX                        // 660f4d13
+	CMOVWGE (R11), DX                       // 66410f4d13
+	CMOVWGE DX, DX                          // 660f4dd2
+	CMOVWGE R11, DX                         // 66410f4dd3
+	CMOVWGE (BX), R11                       // 66440f4d1b
+	CMOVWGE (R11), R11                      // 66450f4d1b
+	CMOVWGE DX, R11                         // 66440f4dda
+	CMOVWGE R11, R11                        // 66450f4ddb
+	CMOVLGE (BX), DX                        // 0f4d13
+	CMOVLGE (R11), DX                       // 410f4d13
+	CMOVLGE DX, DX                          // 0f4dd2
+	CMOVLGE R11, DX                         // 410f4dd3
+	CMOVLGE (BX), R11                       // 440f4d1b
+	CMOVLGE (R11), R11                      // 450f4d1b
+	CMOVLGE DX, R11                         // 440f4dda
+	CMOVLGE R11, R11                        // 450f4ddb
+	CMOVQGE (BX), DX                        // 480f4d13
+	CMOVQGE (R11), DX                       // 490f4d13
+	CMOVQGE DX, DX                          // 480f4dd2
+	CMOVQGE R11, DX                         // 490f4dd3
+	CMOVQGE (BX), R11                       // 4c0f4d1b
+	CMOVQGE (R11), R11                      // 4d0f4d1b
+	CMOVQGE DX, R11                         // 4c0f4dda
+	CMOVQGE R11, R11                        // 4d0f4ddb
+	CMOVWLT (BX), DX                        // 660f4c13
+	CMOVWLT (R11), DX                       // 66410f4c13
+	CMOVWLT DX, DX                          // 660f4cd2
+	CMOVWLT R11, DX                         // 66410f4cd3
+	CMOVWLT (BX), R11                       // 66440f4c1b
+	CMOVWLT (R11), R11                      // 66450f4c1b
+	CMOVWLT DX, R11                         // 66440f4cda
+	CMOVWLT R11, R11                        // 66450f4cdb
+	CMOVLLT (BX), DX                        // 0f4c13
+	CMOVLLT (R11), DX                       // 410f4c13
+	CMOVLLT DX, DX                          // 0f4cd2
+	CMOVLLT R11, DX                         // 410f4cd3
+	CMOVLLT (BX), R11                       // 440f4c1b
+	CMOVLLT (R11), R11                      // 450f4c1b
+	CMOVLLT DX, R11                         // 440f4cda
+	CMOVLLT R11, R11                        // 450f4cdb
+	CMOVQLT (BX), DX                        // 480f4c13
+	CMOVQLT (R11), DX                       // 490f4c13
+	CMOVQLT DX, DX                          // 480f4cd2
+	CMOVQLT R11, DX                         // 490f4cd3
+	CMOVQLT (BX), R11                       // 4c0f4c1b
+	CMOVQLT (R11), R11                      // 4d0f4c1b
+	CMOVQLT DX, R11                         // 4c0f4cda
+	CMOVQLT R11, R11                        // 4d0f4cdb
+	CMOVWLE (BX), DX                        // 660f4e13
+	CMOVWLE (R11), DX                       // 66410f4e13
+	CMOVWLE DX, DX                          // 660f4ed2
+	CMOVWLE R11, DX                         // 66410f4ed3
+	CMOVWLE (BX), R11                       // 66440f4e1b
+	CMOVWLE (R11), R11                      // 66450f4e1b
+	CMOVWLE DX, R11                         // 66440f4eda
+	CMOVWLE R11, R11                        // 66450f4edb
+	CMOVLLE (BX), DX                        // 0f4e13
+	CMOVLLE (R11), DX                       // 410f4e13
+	CMOVLLE DX, DX                          // 0f4ed2
+	CMOVLLE R11, DX                         // 410f4ed3
+	CMOVLLE (BX), R11                       // 440f4e1b
+	CMOVLLE (R11), R11                      // 450f4e1b
+	CMOVLLE DX, R11                         // 440f4eda
+	CMOVLLE R11, R11                        // 450f4edb
+	CMOVQLE (BX), DX                        // 480f4e13
+	CMOVQLE (R11), DX                       // 490f4e13
+	CMOVQLE DX, DX                          // 480f4ed2
+	CMOVQLE R11, DX                         // 490f4ed3
+	CMOVQLE (BX), R11                       // 4c0f4e1b
+	CMOVQLE (R11), R11                      // 4d0f4e1b
+	CMOVQLE DX, R11                         // 4c0f4eda
+	CMOVQLE R11, R11                        // 4d0f4edb
+	CMOVWNE (BX), DX                        // 660f4513
+	CMOVWNE (R11), DX                       // 66410f4513
+	CMOVWNE DX, DX                          // 660f45d2
+	CMOVWNE R11, DX                         // 66410f45d3
+	CMOVWNE (BX), R11                       // 66440f451b
+	CMOVWNE (R11), R11                      // 66450f451b
+	CMOVWNE DX, R11                         // 66440f45da
+	CMOVWNE R11, R11                        // 66450f45db
+	CMOVLNE (BX), DX                        // 0f4513
+	CMOVLNE (R11), DX                       // 410f4513
+	CMOVLNE DX, DX                          // 0f45d2
+	CMOVLNE R11, DX                         // 410f45d3
+	CMOVLNE (BX), R11                       // 440f451b
+	CMOVLNE (R11), R11                      // 450f451b
+	CMOVLNE DX, R11                         // 440f45da
+	CMOVLNE R11, R11                        // 450f45db
+	CMOVQNE (BX), DX                        // 480f4513
+	CMOVQNE (R11), DX                       // 490f4513
+	CMOVQNE DX, DX                          // 480f45d2
+	CMOVQNE R11, DX                         // 490f45d3
+	CMOVQNE (BX), R11                       // 4c0f451b
+	CMOVQNE (R11), R11                      // 4d0f451b
+	CMOVQNE DX, R11                         // 4c0f45da
+	CMOVQNE R11, R11                        // 4d0f45db
+	CMOVWOC (BX), DX                        // 660f4113
+	CMOVWOC (R11), DX                       // 66410f4113
+	CMOVWOC DX, DX                          // 660f41d2
+	CMOVWOC R11, DX                         // 66410f41d3
+	CMOVWOC (BX), R11                       // 66440f411b
+	CMOVWOC (R11), R11                      // 66450f411b
+	CMOVWOC DX, R11                         // 66440f41da
+	CMOVWOC R11, R11                        // 66450f41db
+	CMOVLOC (BX), DX                        // 0f4113
+	CMOVLOC (R11), DX                       // 410f4113
+	CMOVLOC DX, DX                          // 0f41d2
+	CMOVLOC R11, DX                         // 410f41d3
+	CMOVLOC (BX), R11                       // 440f411b
+	CMOVLOC (R11), R11                      // 450f411b
+	CMOVLOC DX, R11                         // 440f41da
+	CMOVLOC R11, R11                        // 450f41db
+	CMOVQOC (BX), DX                        // 480f4113
+	CMOVQOC (R11), DX                       // 490f4113
+	CMOVQOC DX, DX                          // 480f41d2
+	CMOVQOC R11, DX                         // 490f41d3
+	CMOVQOC (BX), R11                       // 4c0f411b
+	CMOVQOC (R11), R11                      // 4d0f411b
+	CMOVQOC DX, R11                         // 4c0f41da
+	CMOVQOC R11, R11                        // 4d0f41db
+	CMOVWPC (BX), DX                        // 660f4b13
+	CMOVWPC (R11), DX                       // 66410f4b13
+	CMOVWPC DX, DX                          // 660f4bd2
+	CMOVWPC R11, DX                         // 66410f4bd3
+	CMOVWPC (BX), R11                       // 66440f4b1b
+	CMOVWPC (R11), R11                      // 66450f4b1b
+	CMOVWPC DX, R11                         // 66440f4bda
+	CMOVWPC R11, R11                        // 66450f4bdb
+	CMOVLPC (BX), DX                        // 0f4b13
+	CMOVLPC (R11), DX                       // 410f4b13
+	CMOVLPC DX, DX                          // 0f4bd2
+	CMOVLPC R11, DX                         // 410f4bd3
+	CMOVLPC (BX), R11                       // 440f4b1b
+	CMOVLPC (R11), R11                      // 450f4b1b
+	CMOVLPC DX, R11                         // 440f4bda
+	CMOVLPC R11, R11                        // 450f4bdb
+	CMOVQPC (BX), DX                        // 480f4b13
+	CMOVQPC (R11), DX                       // 490f4b13
+	CMOVQPC DX, DX                          // 480f4bd2
+	CMOVQPC R11, DX                         // 490f4bd3
+	CMOVQPC (BX), R11                       // 4c0f4b1b
+	CMOVQPC (R11), R11                      // 4d0f4b1b
+	CMOVQPC DX, R11                         // 4c0f4bda
+	CMOVQPC R11, R11                        // 4d0f4bdb
+	CMOVWPL (BX), DX                        // 660f4913
+	CMOVWPL (R11), DX                       // 66410f4913
+	CMOVWPL DX, DX                          // 660f49d2
+	CMOVWPL R11, DX                         // 66410f49d3
+	CMOVWPL (BX), R11                       // 66440f491b
+	CMOVWPL (R11), R11                      // 66450f491b
+	CMOVWPL DX, R11                         // 66440f49da
+	CMOVWPL R11, R11                        // 66450f49db
+	CMOVLPL (BX), DX                        // 0f4913
+	CMOVLPL (R11), DX                       // 410f4913
+	CMOVLPL DX, DX                          // 0f49d2
+	CMOVLPL R11, DX                         // 410f49d3
+	CMOVLPL (BX), R11                       // 440f491b
+	CMOVLPL (R11), R11                      // 450f491b
+	CMOVLPL DX, R11                         // 440f49da
+	CMOVLPL R11, R11                        // 450f49db
+	CMOVQPL (BX), DX                        // 480f4913
+	CMOVQPL (R11), DX                       // 490f4913
+	CMOVQPL DX, DX                          // 480f49d2
+	CMOVQPL R11, DX                         // 490f49d3
+	CMOVQPL (BX), R11                       // 4c0f491b
+	CMOVQPL (R11), R11                      // 4d0f491b
+	CMOVQPL DX, R11                         // 4c0f49da
+	CMOVQPL R11, R11                        // 4d0f49db
+	CMOVWOS (BX), DX                        // 660f4013
+	CMOVWOS (R11), DX                       // 66410f4013
+	CMOVWOS DX, DX                          // 660f40d2
+	CMOVWOS R11, DX                         // 66410f40d3
+	CMOVWOS (BX), R11                       // 66440f401b
+	CMOVWOS (R11), R11                      // 66450f401b
+	CMOVWOS DX, R11                         // 66440f40da
+	CMOVWOS R11, R11                        // 66450f40db
+	CMOVLOS (BX), DX                        // 0f4013
+	CMOVLOS (R11), DX                       // 410f4013
+	CMOVLOS DX, DX                          // 0f40d2
+	CMOVLOS R11, DX                         // 410f40d3
+	CMOVLOS (BX), R11                       // 440f401b
+	CMOVLOS (R11), R11                      // 450f401b
+	CMOVLOS DX, R11                         // 440f40da
+	CMOVLOS R11, R11                        // 450f40db
+	CMOVQOS (BX), DX                        // 480f4013
+	CMOVQOS (R11), DX                       // 490f4013
+	CMOVQOS DX, DX                          // 480f40d2
+	CMOVQOS R11, DX                         // 490f40d3
+	CMOVQOS (BX), R11                       // 4c0f401b
+	CMOVQOS (R11), R11                      // 4d0f401b
+	CMOVQOS DX, R11                         // 4c0f40da
+	CMOVQOS R11, R11                        // 4d0f40db
+	CMOVWPS (BX), DX                        // 660f4a13
+	CMOVWPS (R11), DX                       // 66410f4a13
+	CMOVWPS DX, DX                          // 660f4ad2
+	CMOVWPS R11, DX                         // 66410f4ad3
+	CMOVWPS (BX), R11                       // 66440f4a1b
+	CMOVWPS (R11), R11                      // 66450f4a1b
+	CMOVWPS DX, R11                         // 66440f4ada
+	CMOVWPS R11, R11                        // 66450f4adb
+	CMOVLPS (BX), DX                        // 0f4a13
+	CMOVLPS (R11), DX                       // 410f4a13
+	CMOVLPS DX, DX                          // 0f4ad2
+	CMOVLPS R11, DX                         // 410f4ad3
+	CMOVLPS (BX), R11                       // 440f4a1b
+	CMOVLPS (R11), R11                      // 450f4a1b
+	CMOVLPS DX, R11                         // 440f4ada
+	CMOVLPS R11, R11                        // 450f4adb
+	CMOVQPS (BX), DX                        // 480f4a13
+	CMOVQPS (R11), DX                       // 490f4a13
+	CMOVQPS DX, DX                          // 480f4ad2
+	CMOVQPS R11, DX                         // 490f4ad3
+	CMOVQPS (BX), R11                       // 4c0f4a1b
+	CMOVQPS (R11), R11                      // 4d0f4a1b
+	CMOVQPS DX, R11                         // 4c0f4ada
+	CMOVQPS R11, R11                        // 4d0f4adb
+	CMOVWMI (BX), DX                        // 660f4813
+	CMOVWMI (R11), DX                       // 66410f4813
+	CMOVWMI DX, DX                          // 660f48d2
+	CMOVWMI R11, DX                         // 66410f48d3
+	CMOVWMI (BX), R11                       // 66440f481b
+	CMOVWMI (R11), R11                      // 66450f481b
+	CMOVWMI DX, R11                         // 66440f48da
+	CMOVWMI R11, R11                        // 66450f48db
+	CMOVLMI (BX), DX                        // 0f4813
+	CMOVLMI (R11), DX                       // 410f4813
+	CMOVLMI DX, DX                          // 0f48d2
+	CMOVLMI R11, DX                         // 410f48d3
+	CMOVLMI (BX), R11                       // 440f481b
+	CMOVLMI (R11), R11                      // 450f481b
+	CMOVLMI DX, R11                         // 440f48da
+	CMOVLMI R11, R11                        // 450f48db
+	CMOVQMI (BX), DX                        // 480f4813
+	CMOVQMI (R11), DX                       // 490f4813
+	CMOVQMI DX, DX                          // 480f48d2
+	CMOVQMI R11, DX                         // 490f48d3
+	CMOVQMI (BX), R11                       // 4c0f481b
+	CMOVQMI (R11), R11                      // 4d0f481b
+	CMOVQMI DX, R11                         // 4c0f48da
+	CMOVQMI R11, R11                        // 4d0f48db
+	CMPB AL, $7                             // 3c07
+	CMPW AX, $61731                         // 663d23f1
+	CMPL AX, $4045620583                    // 3d674523f1
+	CMPQ AX, $-249346713                    // 483d674523f1
+	CMPW (BX), $61731                       // 66813b23f1
+	CMPW (R11), $61731                      // 6641813b23f1
+	CMPW DX, $61731                         // 6681fa23f1
+	CMPW R11, $61731                        // 664181fb23f1
+	CMPW (BX), $7                           // 66833b07
+	CMPW (R11), $7                          // 6641833b07
+	CMPW DX, $7                             // 6683fa07
+	CMPW R11, $7                            // 664183fb07
+	CMPW (BX), DX                           // 663913
+	CMPW (BX), R11                          // 6644391b
+	CMPW (R11), DX                          // 66413913
+	CMPW (R11), R11                         // 6645391b
+	CMPW DX, DX                             // 6639d2 or 663bd2
+	CMPW DX, R11                            // 664439da or 66413bd3
+	CMPW R11, DX                            // 664139d3 or 66443bda
+	CMPW R11, R11                           // 664539db or 66453bdb
+	CMPL (BX), $4045620583                  // 813b674523f1
+	CMPL (R11), $4045620583                 // 41813b674523f1
+	CMPL DX, $4045620583                    // 81fa674523f1
+	CMPL R11, $4045620583                   // 4181fb674523f1
+	CMPL (BX), $7                           // 833b07
+	CMPL (R11), $7                          // 41833b07
+	CMPL DX, $7                             // 83fa07
+	CMPL R11, $7                            // 4183fb07
+	CMPL (BX), DX                           // 3913
+	CMPL (BX), R11                          // 44391b
+	CMPL (R11), DX                          // 413913
+	CMPL (R11), R11                         // 45391b
+	CMPL DX, DX                             // 39d2 or 3bd2
+	CMPL DX, R11                            // 4439da or 413bd3
+	CMPL R11, DX                            // 4139d3 or 443bda
+	CMPL R11, R11                           // 4539db or 453bdb
+	CMPQ (BX), $-249346713                  // 48813b674523f1
+	CMPQ (R11), $-249346713                 // 49813b674523f1
+	CMPQ DX, $-249346713                    // 4881fa674523f1
+	CMPQ R11, $-249346713                   // 4981fb674523f1
+	CMPQ (BX), $7                           // 48833b07
+	CMPQ (R11), $7                          // 49833b07
+	CMPQ DX, $7                             // 4883fa07
+	CMPQ R11, $7                            // 4983fb07
+	CMPQ (BX), DX                           // 483913
+	CMPQ (BX), R11                          // 4c391b
+	CMPQ (R11), DX                          // 493913
+	CMPQ (R11), R11                         // 4d391b
+	CMPQ DX, DX                             // 4839d2 or 483bd2
+	CMPQ DX, R11                            // 4c39da or 493bd3
+	CMPQ R11, DX                            // 4939d3 or 4c3bda
+	CMPQ R11, R11                           // 4d39db or 4d3bdb
+	CMPB (BX), $7                           // 803b07
+	CMPB (R11), $7                          // 41803b07
+	CMPB DL, $7                             // 80fa07
+	CMPB R11, $7                            // 4180fb07
+	CMPB (BX), DL                           // 3813
+	CMPB (BX), R11                          // 44381b
+	CMPB (R11), DL                          // 413813
+	CMPB (R11), R11                         // 45381b
+	CMPB DL, DL                             // 38d2 or 3ad2
+	CMPB DL, R11                            // 4438da or 413ad3
+	CMPB R11, DL                            // 4138d3 or 443ada
+	CMPB R11, R11                           // 4538db or 453adb
+	CMPW DX, (BX)                           // 663b13
+	CMPW DX, (R11)                          // 66413b13
+	CMPW R11, (BX)                          // 66443b1b
+	CMPW R11, (R11)                         // 66453b1b
+	CMPL DX, (BX)                           // 3b13
+	CMPL DX, (R11)                          // 413b13
+	CMPL R11, (BX)                          // 443b1b
+	CMPL R11, (R11)                         // 453b1b
+	CMPQ DX, (BX)                           // 483b13
+	CMPQ DX, (R11)                          // 493b13
+	CMPQ R11, (BX)                          // 4c3b1b
+	CMPQ R11, (R11)                         // 4d3b1b
+	CMPB DL, (BX)                           // 3a13
+	CMPB DL, (R11)                          // 413a13
+	CMPB R11, (BX)                          // 443a1b
+	CMPB R11, (R11)                         // 453a1b
+	//TODO: CMPPD $7, X2, (BX)              // 660fc21307
+	//TODO: CMPPD $7, X2, (R11)             // 66410fc21307
+	//TODO: CMPPD $7, X2, X2                // 660fc2d207
+	//TODO: CMPPD $7, X2, X11               // 66410fc2d307
+	//TODO: CMPPD $7, X11, (BX)             // 66440fc21b07
+	//TODO: CMPPD $7, X11, (R11)            // 66450fc21b07
+	//TODO: CMPPD $7, X11, X2               // 66440fc2da07
+	//TODO: CMPPD $7, X11, X11              // 66450fc2db07
+	//TODO: CMPPS $7, X2, (BX)              // 0fc21307
+	//TODO: CMPPS $7, X2, (R11)             // 410fc21307
+	//TODO: CMPPS $7, X2, X2                // 0fc2d207
+	//TODO: CMPPS $7, X2, X11               // 410fc2d307
+	//TODO: CMPPS $7, X11, (BX)             // 440fc21b07
+	//TODO: CMPPS $7, X11, (R11)            // 450fc21b07
+	//TODO: CMPPS $7, X11, X2               // 440fc2da07
+	//TODO: CMPPS $7, X11, X11              // 450fc2db07
+	CMPSB                                   // a6
+	CMPSL                                   // a7
+	//TODO: CMPSD $7, X2, (BX)              // f20fc21307
+	//TODO: CMPSD $7, X2, (R11)             // f2410fc21307
+	//TODO: CMPSD $7, X2, X2                // f20fc2d207
+	//TODO: CMPSD $7, X2, X11               // f2410fc2d307
+	//TODO: CMPSD $7, X11, (BX)             // f2440fc21b07
+	//TODO: CMPSD $7, X11, (R11)            // f2450fc21b07
+	//TODO: CMPSD $7, X11, X2               // f2440fc2da07
+	//TODO: CMPSD $7, X11, X11              // f2450fc2db07
+	CMPSQ                                   // 48a7
+	//TODO: CMPSS $7, X2, (BX)              // f30fc21307
+	//TODO: CMPSS $7, X2, (R11)             // f3410fc21307
+	//TODO: CMPSS $7, X2, X2                // f30fc2d207
+	//TODO: CMPSS $7, X2, X11               // f3410fc2d307
+	//TODO: CMPSS $7, X11, (BX)             // f3440fc21b07
+	//TODO: CMPSS $7, X11, (R11)            // f3450fc21b07
+	//TODO: CMPSS $7, X11, X2               // f3440fc2da07
+	//TODO: CMPSS $7, X11, X11              // f3450fc2db07
+	CMPSW                                   // 66a7
+	CMPXCHGW DX, (BX)                       // 660fb113
+	CMPXCHGW R11, (BX)                      // 66440fb11b
+	CMPXCHGW DX, (R11)                      // 66410fb113
+	CMPXCHGW R11, (R11)                     // 66450fb11b
+	CMPXCHGW DX, DX                         // 660fb1d2
+	CMPXCHGW R11, DX                        // 66440fb1da
+	CMPXCHGW DX, R11                        // 66410fb1d3
+	CMPXCHGW R11, R11                       // 66450fb1db
+	CMPXCHGL DX, (BX)                       // 0fb113
+	CMPXCHGL R11, (BX)                      // 440fb11b
+	CMPXCHGL DX, (R11)                      // 410fb113
+	CMPXCHGL R11, (R11)                     // 450fb11b
+	CMPXCHGL DX, DX                         // 0fb1d2
+	CMPXCHGL R11, DX                        // 440fb1da
+	CMPXCHGL DX, R11                        // 410fb1d3
+	CMPXCHGL R11, R11                       // 450fb1db
+	CMPXCHGQ DX, (BX)                       // 480fb113
+	CMPXCHGQ R11, (BX)                      // 4c0fb11b
+	CMPXCHGQ DX, (R11)                      // 490fb113
+	CMPXCHGQ R11, (R11)                     // 4d0fb11b
+	CMPXCHGQ DX, DX                         // 480fb1d2
+	CMPXCHGQ R11, DX                        // 4c0fb1da
+	CMPXCHGQ DX, R11                        // 490fb1d3
+	CMPXCHGQ R11, R11                       // 4d0fb1db
+	CMPXCHGB DL, (BX)                       // 0fb013
+	CMPXCHGB R11, (BX)                      // 440fb01b
+	CMPXCHGB DL, (R11)                      // 410fb013
+	CMPXCHGB R11, (R11)                     // 450fb01b
+	CMPXCHGB DL, DL                         // 0fb0d2
+	CMPXCHGB R11, DL                        // 440fb0da
+	CMPXCHGB DL, R11                        // 410fb0d3
+	CMPXCHGB R11, R11                       // 450fb0db
+	//TODO: CMPXCHG16B (BX)                 // 480fc70b
+	//TODO: CMPXCHG16B (R11)                // 490fc70b
+	CMPXCHG8B (BX)                          // 0fc70b
+	CMPXCHG8B (R11)                         // 410fc70b
+	COMISD (BX), X2                         // 660f2f13
+	COMISD (R11), X2                        // 66410f2f13
+	COMISD X2, X2                           // 660f2fd2
+	COMISD X11, X2                          // 66410f2fd3
+	COMISD (BX), X11                        // 66440f2f1b
+	COMISD (R11), X11                       // 66450f2f1b
+	COMISD X2, X11                          // 66440f2fda
+	COMISD X11, X11                         // 66450f2fdb
+	COMISS (BX), X2                         // 0f2f13
+	COMISS (R11), X2                        // 410f2f13
+	COMISS X2, X2                           // 0f2fd2
+	COMISS X11, X2                          // 410f2fd3
+	COMISS (BX), X11                        // 440f2f1b
+	COMISS (R11), X11                       // 450f2f1b
+	COMISS X2, X11                          // 440f2fda
+	COMISS X11, X11                         // 450f2fdb
+	CPUID                                   // 0fa2
+	CQO                                     // 4899
+	//TODO: CRC32W (BX), DX                 // 66f20f38f113
+	//TODO: CRC32W (R11), DX                // 66f2410f38f113
+	//TODO: CRC32W DX, DX                   // 66f20f38f1d2
+	//TODO: CRC32W R11, DX                  // 66f2410f38f1d3
+	//TODO: CRC32W (BX), R11                // 66f2440f38f11b
+	//TODO: CRC32W (R11), R11               // 66f2450f38f11b
+	//TODO: CRC32W DX, R11                  // 66f2440f38f1da
+	//TODO: CRC32W R11, R11                 // 66f2450f38f1db
+	//TODO: CRC32L (BX), DX                 // f20f38f113
+	//TODO: CRC32L (R11), DX                // f2410f38f113
+	//TODO: CRC32L DX, DX                   // f20f38f1d2
+	//TODO: CRC32L R11, DX                  // f2410f38f1d3
+	//TODO: CRC32L (BX), R11                // f2440f38f11b
+	//TODO: CRC32L (R11), R11               // f2450f38f11b
+	//TODO: CRC32L DX, R11                  // f2440f38f1da
+	//TODO: CRC32L R11, R11                 // f2450f38f1db
+	//TODO: CRC32B (BX), DX                 // f20f38f013 or f2480f38f013
+	//TODO: CRC32B (R11), DX                // f2410f38f013 or f2490f38f013
+	//TODO: CRC32B DL, DX                   // f20f38f0d2 or f2480f38f0d2
+	//TODO: CRC32B R11, DX                  // f2410f38f0d3 or f2490f38f0d3
+	//TODO: CRC32B (BX), R11                // f2440f38f01b or f24c0f38f01b
+	//TODO: CRC32B (R11), R11               // f2450f38f01b or f24d0f38f01b
+	//TODO: CRC32B DL, R11                  // f2440f38f0da or f24c0f38f0da
+	//TODO: CRC32B R11, R11                 // f2450f38f0db or f24d0f38f0db
+	CRC32Q (BX), DX                         // f2480f38f113
+	CRC32Q (R11), DX                        // f2490f38f113
+	CRC32Q DX, DX                           // f2480f38f1d2
+	CRC32Q R11, DX                          // f2490f38f1d3
+	CRC32Q (BX), R11                        // f24c0f38f11b
+	CRC32Q (R11), R11                       // f24d0f38f11b
+	CRC32Q DX, R11                          // f24c0f38f1da
+	CRC32Q R11, R11                         // f24d0f38f1db
+	CVTPL2PD (BX), X2                       // f30fe613
+	CVTPL2PD (R11), X2                      // f3410fe613
+	CVTPL2PD X2, X2                         // f30fe6d2
+	CVTPL2PD X11, X2                        // f3410fe6d3
+	CVTPL2PD (BX), X11                      // f3440fe61b
+	CVTPL2PD (R11), X11                     // f3450fe61b
+	CVTPL2PD X2, X11                        // f3440fe6da
+	CVTPL2PD X11, X11                       // f3450fe6db
+	CVTPL2PS (BX), X2                       // 0f5b13
+	CVTPL2PS (R11), X2                      // 410f5b13
+	CVTPL2PS X2, X2                         // 0f5bd2
+	CVTPL2PS X11, X2                        // 410f5bd3
+	CVTPL2PS (BX), X11                      // 440f5b1b
+	CVTPL2PS (R11), X11                     // 450f5b1b
+	CVTPL2PS X2, X11                        // 440f5bda
+	CVTPL2PS X11, X11                       // 450f5bdb
+	CVTPD2PL (BX), X2                       // f20fe613
+	CVTPD2PL (R11), X2                      // f2410fe613
+	CVTPD2PL X2, X2                         // f20fe6d2
+	CVTPD2PL X11, X2                        // f2410fe6d3
+	CVTPD2PL (BX), X11                      // f2440fe61b
+	CVTPD2PL (R11), X11                     // f2450fe61b
+	CVTPD2PL X2, X11                        // f2440fe6da
+	CVTPD2PL X11, X11                       // f2450fe6db
+	//TODO: CVTPD2PI (BX), M2               // 660f2d13
+	//TODO: CVTPD2PI (R11), M2              // 66410f2d13
+	//TODO: CVTPD2PI X2, M2                 // 660f2dd2
+	//TODO: CVTPD2PI X11, M2                // 66410f2dd3
+	//TODO: CVTPD2PI (BX), M3               // 660f2d1b
+	//TODO: CVTPD2PI (R11), M3              // 66410f2d1b
+	//TODO: CVTPD2PI X2, M3                 // 660f2dda
+	//TODO: CVTPD2PI X11, M3                // 66410f2ddb
+	CVTPD2PS (BX), X2                       // 660f5a13
+	CVTPD2PS (R11), X2                      // 66410f5a13
+	CVTPD2PS X2, X2                         // 660f5ad2
+	CVTPD2PS X11, X2                        // 66410f5ad3
+	CVTPD2PS (BX), X11                      // 66440f5a1b
+	CVTPD2PS (R11), X11                     // 66450f5a1b
+	CVTPD2PS X2, X11                        // 66440f5ada
+	CVTPD2PS X11, X11                       // 66450f5adb
+	//TODO: CVTPI2PD (BX), X2               // 660f2a13
+	//TODO: CVTPI2PD (R11), X2              // 66410f2a13
+	//TODO: CVTPI2PD M2, X2                 // 660f2ad2
+	//TODO: CVTPI2PD M3, X2                 // 660f2ad3
+	//TODO: CVTPI2PD (BX), X11              // 66440f2a1b
+	//TODO: CVTPI2PD (R11), X11             // 66450f2a1b
+	//TODO: CVTPI2PD M2, X11                // 66440f2ada
+	//TODO: CVTPI2PD M3, X11                // 66440f2adb
+	//TODO: CVTPI2PS (BX), X2               // 0f2a13
+	//TODO: CVTPI2PS (R11), X2              // 410f2a13
+	//TODO: CVTPI2PS M2, X2                 // 0f2ad2
+	//TODO: CVTPI2PS M3, X2                 // 0f2ad3
+	//TODO: CVTPI2PS (BX), X11              // 440f2a1b
+	//TODO: CVTPI2PS (R11), X11             // 450f2a1b
+	//TODO: CVTPI2PS M2, X11                // 440f2ada
+	//TODO: CVTPI2PS M3, X11                // 440f2adb
+	CVTPS2PL (BX), X2                       // 660f5b13
+	CVTPS2PL (R11), X2                      // 66410f5b13
+	CVTPS2PL X2, X2                         // 660f5bd2
+	CVTPS2PL X11, X2                        // 66410f5bd3
+	CVTPS2PL (BX), X11                      // 66440f5b1b
+	CVTPS2PL (R11), X11                     // 66450f5b1b
+	CVTPS2PL X2, X11                        // 66440f5bda
+	CVTPS2PL X11, X11                       // 66450f5bdb
+	CVTPS2PD (BX), X2                       // 0f5a13
+	CVTPS2PD (R11), X2                      // 410f5a13
+	CVTPS2PD X2, X2                         // 0f5ad2
+	CVTPS2PD X11, X2                        // 410f5ad3
+	CVTPS2PD (BX), X11                      // 440f5a1b
+	CVTPS2PD (R11), X11                     // 450f5a1b
+	CVTPS2PD X2, X11                        // 440f5ada
+	CVTPS2PD X11, X11                       // 450f5adb
+	//TODO: CVTPS2PI (BX), M2               // 0f2d13
+	//TODO: CVTPS2PI (R11), M2              // 410f2d13
+	//TODO: CVTPS2PI X2, M2                 // 0f2dd2
+	//TODO: CVTPS2PI X11, M2                // 410f2dd3
+	//TODO: CVTPS2PI (BX), M3               // 0f2d1b
+	//TODO: CVTPS2PI (R11), M3              // 410f2d1b
+	//TODO: CVTPS2PI X2, M3                 // 0f2dda
+	//TODO: CVTPS2PI X11, M3                // 410f2ddb
+	CVTSD2SL (BX), DX                       // f20f2d13 or f2480f2d13
+	CVTSD2SL (R11), DX                      // f2410f2d13 or f2490f2d13
+	CVTSD2SL X2, DX                         // f20f2dd2 or f2480f2dd2
+	CVTSD2SL X11, DX                        // f2410f2dd3 or f2490f2dd3
+	CVTSD2SL (BX), R11                      // f2440f2d1b or f24c0f2d1b
+	CVTSD2SL (R11), R11                     // f2450f2d1b or f24d0f2d1b
+	CVTSD2SL X2, R11                        // f2440f2dda or f24c0f2dda
+	CVTSD2SL X11, R11                       // f2450f2ddb or f24d0f2ddb
+	CVTSD2SS (BX), X2                       // f20f5a13
+	CVTSD2SS (R11), X2                      // f2410f5a13
+	CVTSD2SS X2, X2                         // f20f5ad2
+	CVTSD2SS X11, X2                        // f2410f5ad3
+	CVTSD2SS (BX), X11                      // f2440f5a1b
+	CVTSD2SS (R11), X11                     // f2450f5a1b
+	CVTSD2SS X2, X11                        // f2440f5ada
+	CVTSD2SS X11, X11                       // f2450f5adb
+	CVTSL2SD (BX), X2                       // f20f2a13
+	CVTSL2SD (R11), X2                      // f2410f2a13
+	CVTSL2SD DX, X2                         // f20f2ad2
+	CVTSL2SD R11, X2                        // f2410f2ad3
+	CVTSL2SD (BX), X11                      // f2440f2a1b
+	CVTSL2SD (R11), X11                     // f2450f2a1b
+	CVTSL2SD DX, X11                        // f2440f2ada
+	CVTSL2SD R11, X11                       // f2450f2adb
+	CVTSQ2SD (BX), X2                       // f2480f2a13
+	CVTSQ2SD (R11), X2                      // f2490f2a13
+	CVTSQ2SD DX, X2                         // f2480f2ad2
+	CVTSQ2SD R11, X2                        // f2490f2ad3
+	CVTSQ2SD (BX), X11                      // f24c0f2a1b
+	CVTSQ2SD (R11), X11                     // f24d0f2a1b
+	CVTSQ2SD DX, X11                        // f24c0f2ada
+	CVTSQ2SD R11, X11                       // f24d0f2adb
+	CVTSL2SS (BX), X2                       // f30f2a13
+	CVTSL2SS (R11), X2                      // f3410f2a13
+	CVTSL2SS DX, X2                         // f30f2ad2
+	CVTSL2SS R11, X2                        // f3410f2ad3
+	CVTSL2SS (BX), X11                      // f3440f2a1b
+	CVTSL2SS (R11), X11                     // f3450f2a1b
+	CVTSL2SS DX, X11                        // f3440f2ada
+	CVTSL2SS R11, X11                       // f3450f2adb
+	CVTSQ2SS (BX), X2                       // f3480f2a13
+	CVTSQ2SS (R11), X2                      // f3490f2a13
+	CVTSQ2SS DX, X2                         // f3480f2ad2
+	CVTSQ2SS R11, X2                        // f3490f2ad3
+	CVTSQ2SS (BX), X11                      // f34c0f2a1b
+	CVTSQ2SS (R11), X11                     // f34d0f2a1b
+	CVTSQ2SS DX, X11                        // f34c0f2ada
+	CVTSQ2SS R11, X11                       // f34d0f2adb
+	CVTSS2SD (BX), X2                       // f30f5a13
+	CVTSS2SD (R11), X2                      // f3410f5a13
+	CVTSS2SD X2, X2                         // f30f5ad2
+	CVTSS2SD X11, X2                        // f3410f5ad3
+	CVTSS2SD (BX), X11                      // f3440f5a1b
+	CVTSS2SD (R11), X11                     // f3450f5a1b
+	CVTSS2SD X2, X11                        // f3440f5ada
+	CVTSS2SD X11, X11                       // f3450f5adb
+	CVTSS2SL (BX), DX                       // f30f2d13 or f3480f2d13
+	CVTSS2SL (R11), DX                      // f3410f2d13 or f3490f2d13
+	CVTSS2SL X2, DX                         // f30f2dd2 or f3480f2dd2
+	CVTSS2SL X11, DX                        // f3410f2dd3 or f3490f2dd3
+	CVTSS2SL (BX), R11                      // f3440f2d1b or f34c0f2d1b
+	CVTSS2SL (R11), R11                     // f3450f2d1b or f34d0f2d1b
+	CVTSS2SL X2, R11                        // f3440f2dda or f34c0f2dda
+	CVTSS2SL X11, R11                       // f3450f2ddb or f34d0f2ddb
+	CVTTPD2PL (BX), X2                      // 660fe613
+	CVTTPD2PL (R11), X2                     // 66410fe613
+	CVTTPD2PL X2, X2                        // 660fe6d2
+	CVTTPD2PL X11, X2                       // 66410fe6d3
+	CVTTPD2PL (BX), X11                     // 66440fe61b
+	CVTTPD2PL (R11), X11                    // 66450fe61b
+	CVTTPD2PL X2, X11                       // 66440fe6da
+	CVTTPD2PL X11, X11                      // 66450fe6db
+	//TODO: CVTTPD2PI (BX), M2              // 660f2c13
+	//TODO: CVTTPD2PI (R11), M2             // 66410f2c13
+	//TODO: CVTTPD2PI X2, M2                // 660f2cd2
+	//TODO: CVTTPD2PI X11, M2               // 66410f2cd3
+	//TODO: CVTTPD2PI (BX), M3              // 660f2c1b
+	//TODO: CVTTPD2PI (R11), M3             // 66410f2c1b
+	//TODO: CVTTPD2PI X2, M3                // 660f2cda
+	//TODO: CVTTPD2PI X11, M3               // 66410f2cdb
+	CVTTPS2PL (BX), X2                      // f30f5b13
+	CVTTPS2PL (R11), X2                     // f3410f5b13
+	CVTTPS2PL X2, X2                        // f30f5bd2
+	CVTTPS2PL X11, X2                       // f3410f5bd3
+	CVTTPS2PL (BX), X11                     // f3440f5b1b
+	CVTTPS2PL (R11), X11                    // f3450f5b1b
+	CVTTPS2PL X2, X11                       // f3440f5bda
+	CVTTPS2PL X11, X11                      // f3450f5bdb
+	//TODO: CVTTPS2PI (BX), M2              // 0f2c13
+	//TODO: CVTTPS2PI (R11), M2             // 410f2c13
+	//TODO: CVTTPS2PI X2, M2                // 0f2cd2
+	//TODO: CVTTPS2PI X11, M2               // 410f2cd3
+	//TODO: CVTTPS2PI (BX), M3              // 0f2c1b
+	//TODO: CVTTPS2PI (R11), M3             // 410f2c1b
+	//TODO: CVTTPS2PI X2, M3                // 0f2cda
+	//TODO: CVTTPS2PI X11, M3               // 410f2cdb
+	CVTTSD2SL (BX), DX                      // f20f2c13 or f2480f2c13
+	CVTTSD2SL (R11), DX                     // f2410f2c13 or f2490f2c13
+	CVTTSD2SL X2, DX                        // f20f2cd2 or f2480f2cd2
+	CVTTSD2SL X11, DX                       // f2410f2cd3 or f2490f2cd3
+	CVTTSD2SL (BX), R11                     // f2440f2c1b or f24c0f2c1b
+	CVTTSD2SL (R11), R11                    // f2450f2c1b or f24d0f2c1b
+	CVTTSD2SL X2, R11                       // f2440f2cda or f24c0f2cda
+	CVTTSD2SL X11, R11                      // f2450f2cdb or f24d0f2cdb
+	CVTTSS2SL (BX), DX                      // f30f2c13 or f3480f2c13
+	CVTTSS2SL (R11), DX                     // f3410f2c13 or f3490f2c13
+	CVTTSS2SL X2, DX                        // f30f2cd2 or f3480f2cd2
+	CVTTSS2SL X11, DX                       // f3410f2cd3 or f3490f2cd3
+	CVTTSS2SL (BX), R11                     // f3440f2c1b or f34c0f2c1b
+	CVTTSS2SL (R11), R11                    // f3450f2c1b or f34d0f2c1b
+	CVTTSS2SL X2, R11                       // f3440f2cda or f34c0f2cda
+	CVTTSS2SL X11, R11                      // f3450f2cdb or f34d0f2cdb
+	CWD                                     // 6699
+	//TODO: CWDE                            // 98
+	DECW (BX)                               // 66ff0b
+	DECW (R11)                              // 6641ff0b
+	DECW DX                                 // 66ffca
+	DECW R11                                // 6641ffcb
+	DECL (BX)                               // ff0b
+	DECL (R11)                              // 41ff0b
+	DECL DX                                 // ffca
+	DECL R11                                // 41ffcb
+	DECQ (BX)                               // 48ff0b
+	DECQ (R11)                              // 49ff0b
+	DECQ DX                                 // 48ffca
+	DECQ R11                                // 49ffcb
+	DECB (BX)                               // fe0b
+	DECB (R11)                              // 41fe0b
+	DECB DL                                 // feca
+	DECB R11                                // 41fecb
+	DIVW (BX)                               // 66f733
+	DIVW (R11)                              // 6641f733
+	DIVW DX                                 // 66f7f2
+	DIVW R11                                // 6641f7f3
+	DIVL (BX)                               // f733
+	DIVL (R11)                              // 41f733
+	DIVL DX                                 // f7f2
+	DIVL R11                                // 41f7f3
+	DIVQ (BX)                               // 48f733
+	DIVQ (R11)                              // 49f733
+	DIVQ DX                                 // 48f7f2
+	DIVQ R11                                // 49f7f3
+	DIVB (BX)                               // f633
+	DIVB (R11)                              // 41f633
+	DIVB DL                                 // f6f2
+	DIVB R11                                // 41f6f3
+	DIVPD (BX), X2                          // 660f5e13
+	DIVPD (R11), X2                         // 66410f5e13
+	DIVPD X2, X2                            // 660f5ed2
+	DIVPD X11, X2                           // 66410f5ed3
+	DIVPD (BX), X11                         // 66440f5e1b
+	DIVPD (R11), X11                        // 66450f5e1b
+	DIVPD X2, X11                           // 66440f5eda
+	DIVPD X11, X11                          // 66450f5edb
+	DIVPS (BX), X2                          // 0f5e13
+	DIVPS (R11), X2                         // 410f5e13
+	DIVPS X2, X2                            // 0f5ed2
+	DIVPS X11, X2                           // 410f5ed3
+	DIVPS (BX), X11                         // 440f5e1b
+	DIVPS (R11), X11                        // 450f5e1b
+	DIVPS X2, X11                           // 440f5eda
+	DIVPS X11, X11                          // 450f5edb
+	DIVSD (BX), X2                          // f20f5e13
+	DIVSD (R11), X2                         // f2410f5e13
+	DIVSD X2, X2                            // f20f5ed2
+	DIVSD X11, X2                           // f2410f5ed3
+	DIVSD (BX), X11                         // f2440f5e1b
+	DIVSD (R11), X11                        // f2450f5e1b
+	DIVSD X2, X11                           // f2440f5eda
+	DIVSD X11, X11                          // f2450f5edb
+	DIVSS (BX), X2                          // f30f5e13
+	DIVSS (R11), X2                         // f3410f5e13
+	DIVSS X2, X2                            // f30f5ed2
+	DIVSS X11, X2                           // f3410f5ed3
+	DIVSS (BX), X11                         // f3440f5e1b
+	DIVSS (R11), X11                        // f3450f5e1b
+	DIVSS X2, X11                           // f3440f5eda
+	DIVSS X11, X11                          // f3450f5edb
+	//TODO: DPPD $7, (BX), X2               // 660f3a411307
+	//TODO: DPPD $7, (R11), X2              // 66410f3a411307
+	//TODO: DPPD $7, X2, X2                 // 660f3a41d207
+	//TODO: DPPD $7, X11, X2                // 66410f3a41d307
+	//TODO: DPPD $7, (BX), X11              // 66440f3a411b07
+	//TODO: DPPD $7, (R11), X11             // 66450f3a411b07
+	//TODO: DPPD $7, X2, X11                // 66440f3a41da07
+	//TODO: DPPD $7, X11, X11               // 66450f3a41db07
+	//TODO: DPPS $7, (BX), X2               // 660f3a401307
+	//TODO: DPPS $7, (R11), X2              // 66410f3a401307
+	//TODO: DPPS $7, X2, X2                 // 660f3a40d207
+	//TODO: DPPS $7, X11, X2                // 66410f3a40d307
+	//TODO: DPPS $7, (BX), X11              // 66440f3a401b07
+	//TODO: DPPS $7, (R11), X11             // 66450f3a401b07
+	//TODO: DPPS $7, X2, X11                // 66440f3a40da07
+	//TODO: DPPS $7, X11, X11               // 66450f3a40db07
+	EMMS                                    // 0f77
+	//TODO: ENTERQ $0x12, $0xf123           // c823f112
+	//TODO: EXTRACTPS $7, X2, (BX)          // 660f3a171307
+	//TODO: EXTRACTPS $7, X11, (BX)         // 66440f3a171b07
+	//TODO: EXTRACTPS $7, X2, (R11)         // 66410f3a171307
+	//TODO: EXTRACTPS $7, X11, (R11)        // 66450f3a171b07
+	//TODO: EXTRACTPS $7, X2, DX            // 660f3a17d207
+	//TODO: EXTRACTPS $7, X11, DX           // 66440f3a17da07
+	//TODO: EXTRACTPS $7, X2, R11           // 66410f3a17d307
+	//TODO: EXTRACTPS $7, X11, R11          // 66450f3a17db07
+	F2XM1                                   // d9f0
+	FABS                                    // d9e1
+	FADDD F2, F0                            // d8c2
+	FADDD F3, F0                            // d8c3
+	FADDD F0, F2                            // dcc2
+	FADDD F0, F3                            // dcc3
+	FADDD (BX), F0                          // d803 or dc03
+	FADDD (R11), F0                         // 41d803 or 41dc03
+	FADDDP F0, F2                           // dec2
+	FADDDP F0, F3                           // dec3
+	//TODO: FBLD (BX)                       // df23
+	//TODO: FBLD (R11)                      // 41df23
+	//TODO: FBSTP (BX)                      // df33
+	//TODO: FBSTP (R11)                     // 41df33
+	FCHS                                    // d9e0
+	//TODO: FCMOVB F2, F0                   // dac2
+	//TODO: FCMOVB F3, F0                   // dac3
+	//TODO: FCMOVBE F2, F0                  // dad2
+	//TODO: FCMOVBE F3, F0                  // dad3
+	//TODO: FCMOVE F2, F0                   // daca
+	//TODO: FCMOVE F3, F0                   // dacb
+	//TODO: FCMOVNB F2, F0                  // dbc2
+	//TODO: FCMOVNB F3, F0                  // dbc3
+	//TODO: FCMOVNBE F2, F0                 // dbd2
+	//TODO: FCMOVNBE F3, F0                 // dbd3
+	FCMOVNE F2, F0                          // dbca
+	FCMOVNE F3, F0                          // dbcb
+	FCMOVNU F2, F0                          // dbda
+	FCMOVNU F3, F0                          // dbdb
+	//TODO: FCMOVU F2, F0                   // dada
+	//TODO: FCMOVU F3, F0                   // dadb
+	FCOMD F2, F0                            // d8d2
+	FCOMD F3, F0                            // d8d3
+	FCOMD (BX), F0                          // d813 or dc13
+	FCOMD (R11), F0                         // 41d813 or 41dc13
+	//TODO: FCOMI F2, F0                    // dbf2
+	//TODO: FCOMI F3, F0                    // dbf3
+	//TODO: FCOMIP F2, F0                   // dff2
+	//TODO: FCOMIP F3, F0                   // dff3
+	//TODO: FCOMP F2                        // d8da
+	//TODO: FCOMP F3                        // d8db
+	//TODO: FCOMFP (BX)                     // d81b
+	//TODO: FCOMFP (R11)                    // 41d81b
+	//TODO: FCOMPL (BX)                     // dc1b
+	//TODO: FCOMPL (R11)                    // 41dc1b
+	//TODO: FCOMPP                          // ded9
+	FCOS                                    // d9ff
+	FDECSTP                                 // d9f6
+	FDIVD F2, F0                            // d8f2
+	FDIVD F3, F0                            // d8f3
+	FDIVD F0, F2                            // dcfa or dcf2
+	FDIVD F0, F3                            // dcfb or dcf3
+	FDIVD (BX), F0                          // d833 or dc33
+	FDIVD (R11), F0                         // 41d833 or 41dc33
+	//TODO: FDIVRP F0, F2                   // defa
+	//TODO: FDIVRP F0, F3                   // defb
+	//TODO: FDIVR F2, F0                    // d8fa
+	//TODO: FDIVR F3, F0                    // d8fb
+	//TODO: FDIVFR (BX)                     // d83b
+	//TODO: FDIVFR (R11)                    // 41d83b
+	//TODO: FDIVRL (BX)                     // dc3b
+	//TODO: FDIVRL (R11)                    // 41dc3b
+	//TODO: FDIVP F0, F2                    // def2
+	//TODO: FDIVP F0, F3                    // def3
+	//TODO: FFREE F2                        // ddc2
+	//TODO: FFREE F3                        // ddc3
+	//TODO: FFREEP F2                       // dfc2
+	//TODO: FFREEP F3                       // dfc3
+	//TODO: FIADD (BX)                      // de03
+	//TODO: FIADD (R11)                     // 41de03
+	//TODO: FIADDL (BX)                     // da03
+	//TODO: FIADDL (R11)                    // 41da03
+	//TODO: FICOM (BX)                      // de13
+	//TODO: FICOM (R11)                     // 41de13
+	//TODO: FICOML (BX)                     // da13
+	//TODO: FICOML (R11)                    // 41da13
+	//TODO: FICOMP (BX)                     // de1b
+	//TODO: FICOMP (R11)                    // 41de1b
+	//TODO: FICOMPL (BX)                    // da1b
+	//TODO: FICOMPL (R11)                   // 41da1b
+	//TODO: FIDIV (BX)                      // de33
+	//TODO: FIDIV (R11)                     // 41de33
+	//TODO: FIDIVL (BX)                     // da33
+	//TODO: FIDIVL (R11)                    // 41da33
+	//TODO: FIDIVR (BX)                     // de3b
+	//TODO: FIDIVR (R11)                    // 41de3b
+	//TODO: FIDIVRL (BX)                    // da3b
+	//TODO: FIDIVRL (R11)                   // 41da3b
+	//TODO: FILD (BX)                       // df03
+	//TODO: FILD (R11)                      // 41df03
+	//TODO: FILDL (BX)                      // db03
+	//TODO: FILDL (R11)                     // 41db03
+	//TODO: FILDLL (BX)                     // df2b
+	//TODO: FILDLL (R11)                    // 41df2b
+	//TODO: FIMUL (BX)                      // de0b
+	//TODO: FIMUL (R11)                     // 41de0b
+	//TODO: FIMULL (BX)                     // da0b
+	//TODO: FIMULL (R11)                    // 41da0b
+	FINCSTP                                 // d9f7
+	//TODO: FIST (BX)                       // df13
+	//TODO: FIST (R11)                      // 41df13
+	//TODO: FISTL (BX)                      // db13
+	//TODO: FISTL (R11)                     // 41db13
+	//TODO: FISTP (BX)                      // df1b
+	//TODO: FISTP (R11)                     // 41df1b
+	//TODO: FISTPL (BX)                     // db1b
+	//TODO: FISTPL (R11)                    // 41db1b
+	//TODO: FISTPLL (BX)                    // df3b
+	//TODO: FISTPLL (R11)                   // 41df3b
+	//TODO: FISTTP (BX)                     // df0b
+	//TODO: FISTTP (R11)                    // 41df0b
+	//TODO: FISTTPL (BX)                    // db0b
+	//TODO: FISTTPL (R11)                   // 41db0b
+	//TODO: FISTTPLL (BX)                   // dd0b
+	//TODO: FISTTPLL (R11)                  // 41dd0b
+	//TODO: FISUB (BX)                      // de23
+	//TODO: FISUB (R11)                     // 41de23
+	//TODO: FISUBL (BX)                     // da23
+	//TODO: FISUBL (R11)                    // 41da23
+	//TODO: FISUBR (BX)                     // de2b
+	//TODO: FISUBR (R11)                    // 41de2b
+	//TODO: FISUBRL (BX)                    // da2b
+	//TODO: FISUBRL (R11)                   // 41da2b
+	//TODO: FLD F2                          // d9c2
+	//TODO: FLD F3                          // d9c3
+	//TODO: FLDS (BX)                       // d903
+	//TODO: FLDS (R11)                      // 41d903
+	//TODO: FLDL (BX)                       // dd03
+	//TODO: FLDL (R11)                      // 41dd03
+	//TODO: FLDT (BX)                       // db2b
+	//TODO: FLDT (R11)                      // 41db2b
+	FLD1                                    // d9e8
+	FLDCW (BX)                              // d92b
+	FLDCW (R11)                             // 41d92b
+	//TODO: FLDENVL (BX)                    // d923
+	//TODO: FLDENVL (R11)                   // 41d923
+	FLDL2E                                  // d9ea
+	FLDL2T                                  // d9e9
+	FLDLG2                                  // d9ec
+	FLDPI                                   // d9eb
+	//TODO: FMUL F2, F0                     // d8ca
+	//TODO: FMUL F3, F0                     // d8cb
+	//TODO: FMUL F0, F2                     // dcca
+	//TODO: FMUL F0, F3                     // dccb
+	//TODO: FMULS (BX)                      // d80b
+	//TODO: FMULS (R11)                     // 41d80b
+	//TODO: FMULL (BX)                      // dc0b
+	//TODO: FMULL (R11)                     // 41dc0b
+	//TODO: FMULP F0, F2                    // deca
+	//TODO: FMULP F0, F3                    // decb
+	//TODO: FNCLEX                          // dbe2
+	//TODO: FNINIT                          // dbe3
+	FNOP                                    // d9d0
+	//TODO: FNSAVEL (BX)                    // dd33
+	//TODO: FNSAVEL (R11)                   // 41dd33
+	//TODO: FNSTCW (BX)                     // d93b
+	//TODO: FNSTCW (R11)                    // 41d93b
+	//TODO: FNSTENVL (BX)                   // d933
+	//TODO: FNSTENVL (R11)                  // 41d933
+	//TODO: FNSTSW AX                       // dfe0
+	//TODO: FNSTSW (BX)                     // dd3b
+	//TODO: FNSTSW (R11)                    // 41dd3b
+	FPATAN                                  // d9f3
+	FPREM                                   // d9f8
+	FPREM1                                  // d9f5
+	FPTAN                                   // d9f2
+	FRNDINT                                 // d9fc
+	//TODO: FRSTORL (BX)                    // dd23
+	//TODO: FRSTORL (R11)                   // 41dd23
+	FSCALE                                  // d9fd
+	FSIN                                    // d9fe
+	FSINCOS                                 // d9fb
+	FSQRT                                   // d9fa
+	//TODO: FST F2                          // ddd2
+	//TODO: FST F3                          // ddd3
+	//TODO: FSTS (BX)                       // d913
+	//TODO: FSTS (R11)                      // 41d913
+	//TODO: FSTL (BX)                       // dd13
+	//TODO: FSTL (R11)                      // 41dd13
+	//TODO: FSTP F2                         // ddda
+	//TODO: FSTP F3                         // dddb
+	//TODO: FSTPS (BX)                      // d91b
+	//TODO: FSTPS (R11)                     // 41d91b
+	//TODO: FSTPL (BX)                      // dd1b
+	//TODO: FSTPL (R11)                     // 41dd1b
+	//TODO: FSTPT (BX)                      // db3b
+	//TODO: FSTPT (R11)                     // 41db3b
+	//TODO: FSUB F2, F0                     // d8e2
+	//TODO: FSUB F3, F0                     // d8e3
+	//TODO: FSUBR F0, F2                    // dcea
+	//TODO: FSUBR F0, F3                    // dceb
+	//TODO: FSUBS (BX)                      // d823
+	//TODO: FSUBS (R11)                     // 41d823
+	//TODO: FSUBL (BX)                      // dc23
+	//TODO: FSUBL (R11)                     // 41dc23
+	//TODO: FSUBRP F0, F2                   // deea
+	//TODO: FSUBRP F0, F3                   // deeb
+	//TODO: FSUBR F2, F0                    // d8ea
+	//TODO: FSUBR F3, F0                    // d8eb
+	//TODO: FSUB F0, F2                     // dce2
+	//TODO: FSUB F0, F3                     // dce3
+	//TODO: FSUBRS (BX)                     // d82b
+	//TODO: FSUBRS (R11)                    // 41d82b
+	//TODO: FSUBRL (BX)                     // dc2b
+	//TODO: FSUBRL (R11)                    // 41dc2b
+	//TODO: FSUBP F0, F2                    // dee2
+	//TODO: FSUBP F0, F3                    // dee3
+	FTST                                    // d9e4
+	//TODO: FUCOM F2                        // dde2
+	//TODO: FUCOM F3                        // dde3
+	//TODO: FUCOMI F2, F0                   // dbea
+	//TODO: FUCOMI F3, F0                   // dbeb
+	//TODO: FUCOMIP F2, F0                  // dfea
+	//TODO: FUCOMIP F3, F0                  // dfeb
+	//TODO: FUCOMP F2                       // ddea
+	//TODO: FUCOMP F3                       // ddeb
+	//TODO: FUCOMPP                         // dae9
+	//TODO: FWAIT                           // 9b
+	FXAM                                    // d9e5
+	//TODO: FXCH F2                         // d9ca
+	//TODO: FXCH F3                         // d9cb
+	FXRSTOR (BX)                            // 0fae0b
+	FXRSTOR (R11)                           // 410fae0b
+	FXRSTOR64 (BX)                          // 480fae0b
+	FXRSTOR64 (R11)                         // 490fae0b
+	FXSAVE (BX)                             // 0fae03
+	FXSAVE (R11)                            // 410fae03
+	FXSAVE64 (BX)                           // 480fae03
+	FXSAVE64 (R11)                          // 490fae03
+	FXTRACT                                 // d9f4
+	FYL2X                                   // d9f1
+	FYL2XP1                                 // d9f9
+	HADDPD (BX), X2                         // 660f7c13
+	HADDPD (R11), X2                        // 66410f7c13
+	HADDPD X2, X2                           // 660f7cd2
+	HADDPD X11, X2                          // 66410f7cd3
+	HADDPD (BX), X11                        // 66440f7c1b
+	HADDPD (R11), X11                       // 66450f7c1b
+	HADDPD X2, X11                          // 66440f7cda
+	HADDPD X11, X11                         // 66450f7cdb
+	HADDPS (BX), X2                         // f20f7c13
+	HADDPS (R11), X2                        // f2410f7c13
+	HADDPS X2, X2                           // f20f7cd2
+	HADDPS X11, X2                          // f2410f7cd3
+	HADDPS (BX), X11                        // f2440f7c1b
+	HADDPS (R11), X11                       // f2450f7c1b
+	HADDPS X2, X11                          // f2440f7cda
+	HADDPS X11, X11                         // f2450f7cdb
+	HLT                                     // f4
+	HSUBPD (BX), X2                         // 660f7d13
+	HSUBPD (R11), X2                        // 66410f7d13
+	HSUBPD X2, X2                           // 660f7dd2
+	HSUBPD X11, X2                          // 66410f7dd3
+	HSUBPD (BX), X11                        // 66440f7d1b
+	HSUBPD (R11), X11                       // 66450f7d1b
+	HSUBPD X2, X11                          // 66440f7dda
+	HSUBPD X11, X11                         // 66450f7ddb
+	HSUBPS (BX), X2                         // f20f7d13
+	HSUBPS (R11), X2                        // f2410f7d13
+	HSUBPS X2, X2                           // f20f7dd2
+	HSUBPS X11, X2                          // f2410f7dd3
+	HSUBPS (BX), X11                        // f2440f7d1b
+	HSUBPS (R11), X11                       // f2450f7d1b
+	HSUBPS X2, X11                          // f2440f7dda
+	HSUBPS X11, X11                         // f2450f7ddb
+	//TODO: ICEBP                           // f1
+	IDIVW (BX)                              // 66f73b
+	IDIVW (R11)                             // 6641f73b
+	IDIVW DX                                // 66f7fa
+	IDIVW R11                               // 6641f7fb
+	IDIVL (BX)                              // f73b
+	IDIVL (R11)                             // 41f73b
+	IDIVL DX                                // f7fa
+	IDIVL R11                               // 41f7fb
+	IDIVQ (BX)                              // 48f73b
+	IDIVQ (R11)                             // 49f73b
+	IDIVQ DX                                // 48f7fa
+	IDIVQ R11                               // 49f7fb
+	IDIVB (BX)                              // f63b
+	IDIVB (R11)                             // 41f63b
+	IDIVB DL                                // f6fa
+	IDIVB R11                               // 41f6fb
+	IMULW (BX)                              // 66f72b
+	IMULW (R11)                             // 6641f72b
+	IMULW DX                                // 66f7ea
+	IMULW R11                               // 6641f7eb
+	IMULL (BX)                              // f72b
+	IMULL (R11)                             // 41f72b
+	IMULL DX                                // f7ea
+	IMULL R11                               // 41f7eb
+	IMULQ (BX)                              // 48f72b
+	IMULQ (R11)                             // 49f72b
+	IMULQ DX                                // 48f7ea
+	IMULQ R11                               // 49f7eb
+	IMULB (BX)                              // f62b
+	IMULB (R11)                             // 41f62b
+	IMULB DL                                // f6ea
+	IMULB R11                               // 41f6eb
+	IMULW (BX), DX                          // 660faf13
+	IMULW (R11), DX                         // 66410faf13
+	IMULW DX, DX                            // 660fafd2
+	IMULW R11, DX                           // 66410fafd3
+	IMULW (BX), R11                         // 66440faf1b
+	IMULW (R11), R11                        // 66450faf1b
+	IMULW DX, R11                           // 66440fafda
+	IMULW R11, R11                          // 66450fafdb
+	//TODO: IMULW $0xf123, (BX), DX         // 66691323f1
+	//TODO: IMULW $0xf123, (R11), DX        // 6641691323f1
+	//TODO: IMULW $0xf123, DX, DX           // 6669d223f1
+	//TODO: IMULW $0xf123, R11, DX          // 664169d323f1
+	//TODO: IMULW $0xf123, (BX), R11        // 6644691b23f1
+	//TODO: IMULW $0xf123, (R11), R11       // 6645691b23f1
+	//TODO: IMULW $0xf123, DX, R11          // 664469da23f1
+	//TODO: IMULW $0xf123, R11, R11         // 664569db23f1
+	//TODO: IMULW $7, (BX), DX              // 666b1307
+	//TODO: IMULW $7, (R11), DX             // 66416b1307
+	//TODO: IMULW $7, DX, DX                // 666bd207
+	//TODO: IMULW $7, R11, DX               // 66416bd307
+	//TODO: IMULW $7, (BX), R11             // 66446b1b07
+	//TODO: IMULW $7, (R11), R11            // 66456b1b07
+	//TODO: IMULW $7, DX, R11               // 66446bda07
+	//TODO: IMULW $7, R11, R11              // 66456bdb07
+	IMULL (BX), DX                          // 0faf13
+	IMULL (R11), DX                         // 410faf13
+	IMULL DX, DX                            // 0fafd2
+	IMULL R11, DX                           // 410fafd3
+	IMULL (BX), R11                         // 440faf1b
+	IMULL (R11), R11                        // 450faf1b
+	IMULL DX, R11                           // 440fafda
+	IMULL R11, R11                          // 450fafdb
+	//TODO: IMULL $0xf1234567, (BX), DX     // 6913674523f1
+	//TODO: IMULL $0xf1234567, (R11), DX    // 416913674523f1
+	//TODO: IMULL $0xf1234567, DX, DX       // 69d2674523f1
+	//TODO: IMULL $0xf1234567, R11, DX      // 4169d3674523f1
+	//TODO: IMULL $0xf1234567, (BX), R11    // 44691b674523f1
+	//TODO: IMULL $0xf1234567, (R11), R11   // 45691b674523f1
+	//TODO: IMULL $0xf1234567, DX, R11      // 4469da674523f1
+	//TODO: IMULL $0xf1234567, R11, R11     // 4569db674523f1
+	//TODO: IMULL $7, (BX), DX              // 6b1307
+	//TODO: IMULL $7, (R11), DX             // 416b1307
+	//TODO: IMULL $7, DX, DX                // 6bd207
+	//TODO: IMULL $7, R11, DX               // 416bd307
+	//TODO: IMULL $7, (BX), R11             // 446b1b07
+	//TODO: IMULL $7, (R11), R11            // 456b1b07
+	//TODO: IMULL $7, DX, R11               // 446bda07
+	//TODO: IMULL $7, R11, R11              // 456bdb07
+	IMULQ (BX), DX                          // 480faf13
+	IMULQ (R11), DX                         // 490faf13
+	IMULQ DX, DX                            // 480fafd2
+	IMULQ R11, DX                           // 490fafd3
+	IMULQ (BX), R11                         // 4c0faf1b
+	IMULQ (R11), R11                        // 4d0faf1b
+	IMULQ DX, R11                           // 4c0fafda
+	IMULQ R11, R11                          // 4d0fafdb
+	//TODO: IMULQ $0xfffffffff1234567, (BX), DX // 486913674523f1
+	//TODO: IMULQ $0xfffffffff1234567, (R11), DX // 496913674523f1
+	//TODO: IMULQ $0xfffffffff1234567, DX, DX // 4869d2674523f1
+	//TODO: IMULQ $0xfffffffff1234567, R11, DX // 4969d3674523f1
+	//TODO: IMULQ $0xfffffffff1234567, (BX), R11 // 4c691b674523f1
+	//TODO: IMULQ $0xfffffffff1234567, (R11), R11 // 4d691b674523f1
+	//TODO: IMULQ $0xfffffffff1234567, DX, R11 // 4c69da674523f1
+	//TODO: IMULQ $0xfffffffff1234567, R11, R11 // 4d69db674523f1
+	IMUL3Q $7, (BX), DX                     // 486b1307
+	IMUL3Q $7, (R11), DX                    // 496b1307
+	IMUL3Q $7, DX, DX                       // 486bd207
+	IMUL3Q $7, R11, DX                      // 496bd307
+	IMUL3Q $7, (BX), R11                    // 4c6b1b07
+	IMUL3Q $7, (R11), R11                   // 4d6b1b07
+	IMUL3Q $7, DX, R11                      // 4c6bda07
+	IMUL3Q $7, R11, R11                     // 4d6bdb07
+	//TODO: INB DX, AL                      // ec
+	//TODO: INB $7, AL                      // e407
+	//TODO: INW DX, AX                      // 66ed
+	//TODO: INW $7, AX                      // 66e507
+	//TODO: INL DX, AX                      // ed
+	//TODO: INL $7, AX                      // e507
+	INCW (BX)                               // 66ff03
+	INCW (R11)                              // 6641ff03
+	INCW DX                                 // 66ffc2
+	INCW R11                                // 6641ffc3
+	INCL (BX)                               // ff03
+	INCL (R11)                              // 41ff03
+	INCL DX                                 // ffc2
+	INCL R11                                // 41ffc3
+	INCQ (BX)                               // 48ff03
+	INCQ (R11)                              // 49ff03
+	INCQ DX                                 // 48ffc2
+	INCQ R11                                // 49ffc3
+	INCB (BX)                               // fe03
+	INCB (R11)                              // 41fe03
+	INCB DL                                 // fec2
+	INCB R11                                // 41fec3
+	INSB                                    // 6c
+	INSL                                    // 6d
+	//TODO: INSERTPS $7, (BX), X2           // 660f3a211307
+	//TODO: INSERTPS $7, (R11), X2          // 66410f3a211307
+	//TODO: INSERTPS $7, X2, X2             // 660f3a21d207
+	//TODO: INSERTPS $7, X11, X2            // 66410f3a21d307
+	//TODO: INSERTPS $7, (BX), X11          // 66440f3a211b07
+	//TODO: INSERTPS $7, (R11), X11         // 66450f3a211b07
+	//TODO: INSERTPS $7, X2, X11            // 66440f3a21da07
+	//TODO: INSERTPS $7, X11, X11           // 66450f3a21db07
+	INSW                                    // 666d
+	//TODO: INT $3                          // cc
+	INT $7                                  // cd07
+	INVD                                    // 0f08
+	INVLPG (BX)                             // 0f013b
+	INVLPG (R11)                            // 410f013b
+	//TODO: INVPCID (BX), DX                // 660f388213
+	//TODO: INVPCID (R11), DX               // 66410f388213
+	//TODO: INVPCID (BX), R11               // 66440f38821b
+	//TODO: INVPCID (R11), R11              // 66450f38821b
+	JCS 2(PC)
+	IRETW                                   // 66cf
+	JCS 2(PC)
+	IRETL                                   // cf
+	JCS 2(PC)
+	IRETQ                                   // 48cf
+	//TODO: JA .+$0x11223344                // 480f8744332211 or 0f8744332211
+	//TODO: JA .+$0x11                      // 7711
+	//TODO: JAE .+$0x11223344               // 0f8344332211 or 480f8344332211
+	//TODO: JAE .+$0x11                     // 7311
+	//TODO: JB .+$0x11223344                // 480f8244332211 or 0f8244332211
+	//TODO: JB .+$0x11                      // 7211
+	//TODO: JBE .+$0x11223344               // 0f8644332211 or 480f8644332211
+	//TODO: JBE .+$0x11                     // 7611
+	//TODO: JE .+$0x11223344                // 480f8444332211 or 0f8444332211
+	//TODO: JE .+$0x11                      // 7411
+	//TODO: JECXZ .+$0x11                   // e311
+	//TODO: JG .+$0x11223344                // 0f8f44332211 or 480f8f44332211
+	//TODO: JG .+$0x11                      // 7f11
+	//TODO: JGE .+$0x11223344               // 480f8d44332211 or 0f8d44332211
+	//TODO: JGE .+$0x11                     // 7d11
+	//TODO: JL .+$0x11223344                // 0f8c44332211 or 480f8c44332211
+	//TODO: JL .+$0x11                      // 7c11
+	//TODO: JLE .+$0x11223344               // 0f8e44332211 or 480f8e44332211
+	//TODO: JLE .+$0x11                     // 7e11
+	JCS 2(PC)
+	//TODO: JMPQ* (BX)                      // ff23
+	JCS 2(PC)
+	//TODO: JMPQ* (R11)                     // 41ff23
+	JCS 2(PC)
+	//TODO: JMPQ* DX                        // ffe2
+	JCS 2(PC)
+	//TODO: JMPQ* R11                       // 41ffe3
+	JCS 2(PC)
+	//TODO: JMP .+$0x11223344               // 48e944332211 or e944332211
+	JCS 2(PC)
+	JCS 2(PC)
+	//TODO: JMP .+$0x11                     // eb11
+	JCS 2(PC)
+	//TODO: LJMPW* (BX)                     // 66ff2b
+	JCS 2(PC)
+	//TODO: LJMPW* (R11)                    // 6641ff2b
+	JCS 2(PC)
+	//TODO: LJMPL* (BX)                     // ff2b
+	JCS 2(PC)
+	//TODO: LJMPL* (R11)                    // 41ff2b
+	JCS 2(PC)
+	//TODO: LJMPQ* (BX)                     // 48ff2b
+	JCS 2(PC)
+	//TODO: LJMPQ* (R11)                    // 49ff2b
+	//TODO: JNE .+$0x11223344               // 480f8544332211 or 0f8544332211
+	//TODO: JNE .+$0x11                     // 7511
+	//TODO: JNO .+$0x11223344               // 480f8144332211 or 0f8144332211
+	//TODO: JNO .+$0x11                     // 7111
+	//TODO: JNP .+$0x11223344               // 480f8b44332211 or 0f8b44332211
+	//TODO: JNP .+$0x11                     // 7b11
+	//TODO: JNS .+$0x11223344               // 0f8944332211 or 480f8944332211
+	//TODO: JNS .+$0x11                     // 7911
+	//TODO: JO .+$0x11223344                // 0f8044332211 or 480f8044332211
+	//TODO: JO .+$0x11                      // 7011
+	//TODO: JP .+$0x11223344                // 480f8a44332211 or 0f8a44332211
+	//TODO: JP .+$0x11                      // 7a11
+	//TODO: JRCXZ .+$0x11                   // e311
+	//TODO: JS .+$0x11223344                // 480f8844332211 or 0f8844332211
+	//TODO: JS .+$0x11                      // 7811
+	LAHF                                    // 9f
+	LARW (BX), DX                           // 660f0213
+	LARW (R11), DX                          // 66410f0213
+	LARW DX, DX                             // 660f02d2
+	LARW R11, DX                            // 66410f02d3
+	LARW (BX), R11                          // 66440f021b
+	LARW (R11), R11                         // 66450f021b
+	LARW DX, R11                            // 66440f02da
+	LARW R11, R11                           // 66450f02db
+	LARL (BX), DX                           // 0f0213
+	LARL (R11), DX                          // 410f0213
+	LARL DX, DX                             // 0f02d2
+	LARL R11, DX                            // 410f02d3
+	LARL (BX), R11                          // 440f021b
+	LARL (R11), R11                         // 450f021b
+	LARL DX, R11                            // 440f02da
+	LARL R11, R11                           // 450f02db
+	//TODO: LARQ (BX), DX                   // 480f0213
+	//TODO: LARQ (R11), DX                  // 490f0213
+	//TODO: LARQ DX, DX                     // 480f02d2
+	//TODO: LARQ R11, DX                    // 490f02d3
+	//TODO: LARQ (BX), R11                  // 4c0f021b
+	//TODO: LARQ (R11), R11                 // 4d0f021b
+	//TODO: LARQ DX, R11                    // 4c0f02da
+	//TODO: LARQ R11, R11                   // 4d0f02db
+	LDDQU (BX), X2                          // f20ff013
+	LDDQU (R11), X2                         // f2410ff013
+	LDDQU (BX), X11                         // f2440ff01b
+	LDDQU (R11), X11                        // f2450ff01b
+	LDMXCSR (BX)                            // 0fae13
+	LDMXCSR (R11)                           // 410fae13
+	LEAW (BX), DX                           // 668d13
+	LEAW (R11), DX                          // 66418d13
+	LEAW (BX), R11                          // 66448d1b
+	LEAW (R11), R11                         // 66458d1b
+	LEAL (BX), DX                           // 8d13
+	LEAL (R11), DX                          // 418d13
+	LEAL (BX), R11                          // 448d1b
+	LEAL (R11), R11                         // 458d1b
+	LEAQ (BX), DX                           // 488d13
+	LEAQ (R11), DX                          // 498d13
+	LEAQ (BX), R11                          // 4c8d1b
+	LEAQ (R11), R11                         // 4d8d1b
+	LEAVEQ                                  // 66c9 or c9
+	LFENCE                                  // 0faee8
+	//TODO: LFSW (BX), DX                   // 660fb413
+	//TODO: LFSW (R11), DX                  // 66410fb413
+	//TODO: LFSW (BX), R11                  // 66440fb41b
+	//TODO: LFSW (R11), R11                 // 66450fb41b
+	//TODO: LFSL (BX), DX                   // 0fb413
+	//TODO: LFSL (R11), DX                  // 410fb413
+	//TODO: LFSL (BX), R11                  // 440fb41b
+	//TODO: LFSL (R11), R11                 // 450fb41b
+	//TODO: LFSQ (BX), DX                   // 480fb413
+	//TODO: LFSQ (R11), DX                  // 490fb413
+	//TODO: LFSQ (BX), R11                  // 4c0fb41b
+	//TODO: LFSQ (R11), R11                 // 4d0fb41b
+	//TODO: LGDT (BX)                       // 0f0113
+	//TODO: LGDT (R11)                      // 410f0113
+	//TODO: LGSW (BX), DX                   // 660fb513
+	//TODO: LGSW (R11), DX                  // 66410fb513
+	//TODO: LGSW (BX), R11                  // 66440fb51b
+	//TODO: LGSW (R11), R11                 // 66450fb51b
+	//TODO: LGSL (BX), DX                   // 0fb513
+	//TODO: LGSL (R11), DX                  // 410fb513
+	//TODO: LGSL (BX), R11                  // 440fb51b
+	//TODO: LGSL (R11), R11                 // 450fb51b
+	//TODO: LGSQ (BX), DX                   // 480fb513
+	//TODO: LGSQ (R11), DX                  // 490fb513
+	//TODO: LGSQ (BX), R11                  // 4c0fb51b
+	//TODO: LGSQ (R11), R11                 // 4d0fb51b
+	//TODO: LIDT (BX)                       // 0f011b
+	//TODO: LIDT (R11)                      // 410f011b
+	//TODO: LLDT (BX)                       // 0f0013
+	//TODO: LLDT (R11)                      // 410f0013
+	//TODO: LLDT DX                         // 0f00d2
+	//TODO: LLDT R11                        // 410f00d3
+	//TODO: LMSW (BX)                       // 0f0133
+	//TODO: LMSW (R11)                      // 410f0133
+	//TODO: LMSW DX                         // 0f01f2
+	//TODO: LMSW R11                        // 410f01f3
+	LODSB                                   // ac
+	LODSL                                   // ad
+	LODSQ                                   // 48ad
+	LODSW                                   // 66ad
+	//TODO: LOOP .+$0x11                    // e211
+	//TODO: LOOPEQ .+$0x11                  // e111
+	//TODO: LOOPNE .+$0x11                  // e011
+	LSLW (BX), DX                           // 660f0313
+	LSLW (R11), DX                          // 66410f0313
+	LSLW DX, DX                             // 660f03d2
+	LSLW R11, DX                            // 66410f03d3
+	LSLW (BX), R11                          // 66440f031b
+	LSLW (R11), R11                         // 66450f031b
+	LSLW DX, R11                            // 66440f03da
+	LSLW R11, R11                           // 66450f03db
+	LSLL (BX), DX                           // 0f0313
+	LSLL (R11), DX                          // 410f0313
+	LSLL DX, DX                             // 0f03d2
+	LSLL R11, DX                            // 410f03d3
+	LSLL (BX), R11                          // 440f031b
+	LSLL (R11), R11                         // 450f031b
+	LSLL DX, R11                            // 440f03da
+	LSLL R11, R11                           // 450f03db
+	//TODO: LSLQ (BX), DX                   // 480f0313
+	//TODO: LSLQ (R11), DX                  // 490f0313
+	//TODO: LSLQ DX, DX                     // 480f03d2
+	//TODO: LSLQ R11, DX                    // 490f03d3
+	//TODO: LSLQ (BX), R11                  // 4c0f031b
+	//TODO: LSLQ (R11), R11                 // 4d0f031b
+	//TODO: LSLQ DX, R11                    // 4c0f03da
+	//TODO: LSLQ R11, R11                   // 4d0f03db
+	//TODO: LSSW (BX), DX                   // 660fb213
+	//TODO: LSSW (R11), DX                  // 66410fb213
+	//TODO: LSSW (BX), R11                  // 66440fb21b
+	//TODO: LSSW (R11), R11                 // 66450fb21b
+	//TODO: LSSL (BX), DX                   // 0fb213
+	//TODO: LSSL (R11), DX                  // 410fb213
+	//TODO: LSSL (BX), R11                  // 440fb21b
+	//TODO: LSSL (R11), R11                 // 450fb21b
+	//TODO: LSSQ (BX), DX                   // 480fb213
+	//TODO: LSSQ (R11), DX                  // 490fb213
+	//TODO: LSSQ (BX), R11                  // 4c0fb21b
+	//TODO: LSSQ (R11), R11                 // 4d0fb21b
+	//TODO: LTR (BX)                        // 0f001b
+	//TODO: LTR (R11)                       // 410f001b
+	//TODO: LTR DX                          // 0f00da
+	//TODO: LTR R11                         // 410f00db
+	//TODO: LZCNTW (BX), DX                 // 66f30fbd13
+	//TODO: LZCNTW (R11), DX                // 66f3410fbd13
+	//TODO: LZCNTW DX, DX                   // 66f30fbdd2
+	//TODO: LZCNTW R11, DX                  // 66f3410fbdd3
+	//TODO: LZCNTW (BX), R11                // 66f3440fbd1b
+	//TODO: LZCNTW (R11), R11               // 66f3450fbd1b
+	//TODO: LZCNTW DX, R11                  // 66f3440fbdda
+	//TODO: LZCNTW R11, R11                 // 66f3450fbddb
+	//TODO: LZCNTL (BX), DX                 // f30fbd13
+	//TODO: LZCNTL (R11), DX                // f3410fbd13
+	//TODO: LZCNTL DX, DX                   // f30fbdd2
+	//TODO: LZCNTL R11, DX                  // f3410fbdd3
+	//TODO: LZCNTL (BX), R11                // f3440fbd1b
+	//TODO: LZCNTL (R11), R11               // f3450fbd1b
+	//TODO: LZCNTL DX, R11                  // f3440fbdda
+	//TODO: LZCNTL R11, R11                 // f3450fbddb
+	//TODO: LZCNTQ (BX), DX                 // f3480fbd13
+	//TODO: LZCNTQ (R11), DX                // f3490fbd13
+	//TODO: LZCNTQ DX, DX                   // f3480fbdd2
+	//TODO: LZCNTQ R11, DX                  // f3490fbdd3
+	//TODO: LZCNTQ (BX), R11                // f34c0fbd1b
+	//TODO: LZCNTQ (R11), R11               // f34d0fbd1b
+	//TODO: LZCNTQ DX, R11                  // f34c0fbdda
+	//TODO: LZCNTQ R11, R11                 // f34d0fbddb
+	MASKMOVOU X2, X2                        // 660ff7d2
+	MASKMOVOU X11, X2                       // 66410ff7d3
+	MASKMOVOU X2, X11                       // 66440ff7da
+	MASKMOVOU X11, X11                      // 66450ff7db
+	MASKMOVQ M2, M2                         // 0ff7d2
+	MASKMOVQ M3, M2                         // 0ff7d3
+	MASKMOVQ M2, M3                         // 0ff7da
+	MASKMOVQ M3, M3                         // 0ff7db
+	MAXPD (BX), X2                          // 660f5f13
+	MAXPD (R11), X2                         // 66410f5f13
+	MAXPD X2, X2                            // 660f5fd2
+	MAXPD X11, X2                           // 66410f5fd3
+	MAXPD (BX), X11                         // 66440f5f1b
+	MAXPD (R11), X11                        // 66450f5f1b
+	MAXPD X2, X11                           // 66440f5fda
+	MAXPD X11, X11                          // 66450f5fdb
+	MAXPS (BX), X2                          // 0f5f13
+	MAXPS (R11), X2                         // 410f5f13
+	MAXPS X2, X2                            // 0f5fd2
+	MAXPS X11, X2                           // 410f5fd3
+	MAXPS (BX), X11                         // 440f5f1b
+	MAXPS (R11), X11                        // 450f5f1b
+	MAXPS X2, X11                           // 440f5fda
+	MAXPS X11, X11                          // 450f5fdb
+	MAXSD (BX), X2                          // f20f5f13
+	MAXSD (R11), X2                         // f2410f5f13
+	MAXSD X2, X2                            // f20f5fd2
+	MAXSD X11, X2                           // f2410f5fd3
+	MAXSD (BX), X11                         // f2440f5f1b
+	MAXSD (R11), X11                        // f2450f5f1b
+	MAXSD X2, X11                           // f2440f5fda
+	MAXSD X11, X11                          // f2450f5fdb
+	MAXSS (BX), X2                          // f30f5f13
+	MAXSS (R11), X2                         // f3410f5f13
+	MAXSS X2, X2                            // f30f5fd2
+	MAXSS X11, X2                           // f3410f5fd3
+	MAXSS (BX), X11                         // f3440f5f1b
+	MAXSS (R11), X11                        // f3450f5f1b
+	MAXSS X2, X11                           // f3440f5fda
+	MAXSS X11, X11                          // f3450f5fdb
+	MFENCE                                  // 0faef0
+	MINPD (BX), X2                          // 660f5d13
+	MINPD (R11), X2                         // 66410f5d13
+	MINPD X2, X2                            // 660f5dd2
+	MINPD X11, X2                           // 66410f5dd3
+	MINPD (BX), X11                         // 66440f5d1b
+	MINPD (R11), X11                        // 66450f5d1b
+	MINPD X2, X11                           // 66440f5dda
+	MINPD X11, X11                          // 66450f5ddb
+	MINPS (BX), X2                          // 0f5d13
+	MINPS (R11), X2                         // 410f5d13
+	MINPS X2, X2                            // 0f5dd2
+	MINPS X11, X2                           // 410f5dd3
+	MINPS (BX), X11                         // 440f5d1b
+	MINPS (R11), X11                        // 450f5d1b
+	MINPS X2, X11                           // 440f5dda
+	MINPS X11, X11                          // 450f5ddb
+	MINSD (BX), X2                          // f20f5d13
+	MINSD (R11), X2                         // f2410f5d13
+	MINSD X2, X2                            // f20f5dd2
+	MINSD X11, X2                           // f2410f5dd3
+	MINSD (BX), X11                         // f2440f5d1b
+	MINSD (R11), X11                        // f2450f5d1b
+	MINSD X2, X11                           // f2440f5dda
+	MINSD X11, X11                          // f2450f5ddb
+	MINSS (BX), X2                          // f30f5d13
+	MINSS (R11), X2                         // f3410f5d13
+	MINSS X2, X2                            // f30f5dd2
+	MINSS X11, X2                           // f3410f5dd3
+	MINSS (BX), X11                         // f3440f5d1b
+	MINSS (R11), X11                        // f3450f5d1b
+	MINSS X2, X11                           // f3440f5dda
+	MINSS X11, X11                          // f3450f5ddb
+	//TODO: MONITOR                         // 0f01c8
+	//TODO: MOVABSB 0x123456789abcdef1, AL  // a0f1debc9a78563412
+	//TODO: MOVW 0x123456789abcdef1, AX     // 66a1f1debc9a78563412
+	MOVQ DX, CR2                            // 0f22d2
+	MOVQ R11, CR2                           // 410f22d3
+	MOVQ DX, CR3                            // 0f22da
+	MOVQ R11, CR3                           // 410f22db
+	//TODO: MOVQ DX, DR2                    // 0f23d2
+	//TODO: MOVQ R11, DR2                   // 410f23d3
+	//TODO: MOVQ DX, DR3                    // 0f23da
+	//TODO: MOVQ R11, DR3                   // 410f23db
+	//TODO: MOVL 0x123456789abcdef1, AX     // a1f1debc9a78563412
+	//TODO: MOVQ 0x123456789abcdef1, AX     // 48a1f1debc9a78563412
+	//TODO: MOVW (BX), SS                   // 668e13 or 488e13
+	//TODO: MOVW (R11), SS                  // 66418e13 or 498e13
+	//TODO: MOVW DX, SS                     // 668ed2 or 488ed2
+	//TODO: MOVW R11, SS                    // 66418ed3 or 498ed3
+	//TODO: MOVW (BX), DS                   // 668e1b or 488e1b
+	//TODO: MOVW (R11), DS                  // 66418e1b or 498e1b
+	//TODO: MOVW DX, DS                     // 668eda or 488eda
+	//TODO: MOVW R11, DS                    // 66418edb or 498edb
+	//TODO: MOVL (BX), SS                   // 8e13
+	//TODO: MOVL (R11), SS                  // 418e13
+	//TODO: MOVL DX, SS                     // 8ed2
+	//TODO: MOVL R11, SS                    // 418ed3
+	//TODO: MOVL (BX), DS                   // 8e1b
+	//TODO: MOVL (R11), DS                  // 418e1b
+	//TODO: MOVL DX, DS                     // 8eda
+	//TODO: MOVL R11, DS                    // 418edb
+	//TODO: MOVW AX, 0x123456789abcdef1     // 66a3f1debc9a78563412
+	//TODO: MOVL AX, 0x123456789abcdef1     // a3f1debc9a78563412
+	//TODO: MOVQ AX, 0x123456789abcdef1     // 48a3f1debc9a78563412
+	//TODO: MOVABSB AL, 0x123456789abcdef1  // a2f1debc9a78563412
+	//TODO: MOVW SS, (BX)                   // 668c13 or 488c13
+	//TODO: MOVW DS, (BX)                   // 668c1b or 488c1b
+	//TODO: MOVW SS, (R11)                  // 66418c13 or 498c13
+	//TODO: MOVW DS, (R11)                  // 66418c1b or 498c1b
+	//TODO: MOVW SS, DX                     // 668cd2 or 488cd2
+	//TODO: MOVW DS, DX                     // 668cda or 488cda
+	//TODO: MOVW SS, R11                    // 66418cd3 or 498cd3
+	//TODO: MOVW DS, R11                    // 66418cdb or 498cdb
+	MOVW $61731, (BX)                       // 66c70323f1
+	MOVW $61731, (R11)                      // 6641c70323f1
+	MOVW $61731, DX                         // 66c7c223f1 or 66ba23f1
+	MOVW $61731, R11                        // 6641c7c323f1 or 6641bb23f1
+	MOVW DX, (BX)                           // 668913
+	MOVW R11, (BX)                          // 6644891b
+	MOVW DX, (R11)                          // 66418913
+	MOVW R11, (R11)                         // 6645891b
+	MOVW DX, DX                             // 6689d2 or 668bd2
+	MOVW R11, DX                            // 664489da or 66418bd3
+	MOVW DX, R11                            // 664189d3 or 66448bda
+	MOVW R11, R11                           // 664589db or 66458bdb
+	//TODO: MOVL SS, (BX)                   // 8c13
+	//TODO: MOVL DS, (BX)                   // 8c1b
+	//TODO: MOVL SS, (R11)                  // 418c13
+	//TODO: MOVL DS, (R11)                  // 418c1b
+	//TODO: MOVL SS, DX                     // 8cd2
+	//TODO: MOVL DS, DX                     // 8cda
+	//TODO: MOVL SS, R11                    // 418cd3
+	//TODO: MOVL DS, R11                    // 418cdb
+	MOVL $4045620583, (BX)                  // c703674523f1
+	MOVL $4045620583, (R11)                 // 41c703674523f1
+	MOVL $4045620583, DX                    // c7c2674523f1 or ba674523f1
+	MOVL $4045620583, R11                   // 41c7c3674523f1 or 41bb674523f1
+	MOVL DX, (BX)                           // 8913
+	MOVL R11, (BX)                          // 44891b
+	MOVL DX, (R11)                          // 418913
+	MOVL R11, (R11)                         // 45891b
+	MOVL DX, DX                             // 89d2 or 8bd2
+	MOVL R11, DX                            // 4489da or 418bd3
+	MOVL DX, R11                            // 4189d3 or 448bda
+	MOVL R11, R11                           // 4589db or 458bdb
+	MOVQ $-249346713, (BX)                  // 48c703674523f1
+	MOVQ $-249346713, (R11)                 // 49c703674523f1
+	MOVQ $-249346713, DX                    // 48c7c2674523f1
+	MOVQ $-249346713, R11                   // 49c7c3674523f1
+	MOVQ DX, (BX)                           // 488913
+	MOVQ R11, (BX)                          // 4c891b
+	MOVQ DX, (R11)                          // 498913
+	MOVQ R11, (R11)                         // 4d891b
+	MOVQ DX, DX                             // 4889d2 or 488bd2
+	MOVQ R11, DX                            // 4c89da or 498bd3
+	MOVQ DX, R11                            // 4989d3 or 4c8bda
+	MOVQ R11, R11                           // 4d89db or 4d8bdb
+	MOVB $7, (BX)                           // c60307
+	MOVB $7, (R11)                          // 41c60307
+	MOVB $7, DL                             // c6c207 or b207
+	MOVB $7, R11                            // 41c6c307 or 41b307
+	MOVB DL, (BX)                           // 8813
+	MOVB R11, (BX)                          // 44881b
+	MOVB DL, (R11)                          // 418813
+	MOVB R11, (R11)                         // 45881b
+	MOVB DL, DL                             // 88d2 or 8ad2
+	MOVB R11, DL                            // 4488da or 418ad3
+	MOVB DL, R11                            // 4188d3 or 448ada
+	MOVB R11, R11                           // 4588db or 458adb
+	MOVW (BX), DX                           // 668b13
+	MOVW (R11), DX                          // 66418b13
+	MOVW (BX), R11                          // 66448b1b
+	MOVW (R11), R11                         // 66458b1b
+	MOVL (BX), DX                           // 8b13
+	MOVL (R11), DX                          // 418b13
+	MOVL (BX), R11                          // 448b1b
+	MOVL (R11), R11                         // 458b1b
+	MOVQ (BX), DX                           // 488b13
+	MOVQ (R11), DX                          // 498b13
+	MOVQ (BX), R11                          // 4c8b1b
+	MOVQ (R11), R11                         // 4d8b1b
+	MOVQ $-1070935975390360081, DX          // 48baefcdab89674523f1
+	MOVQ $-1070935975390360081, R11         // 49bbefcdab89674523f1
+	MOVB (BX), DL                           // 8a13
+	MOVB (R11), DL                          // 418a13
+	MOVB (BX), R11                          // 448a1b
+	MOVB (R11), R11                         // 458a1b
+	MOVQ CR2, DX                            // 0f20d2
+	MOVQ CR3, DX                            // 0f20da
+	MOVQ CR2, R11                           // 410f20d3
+	MOVQ CR3, R11                           // 410f20db
+	//TODO: MOVQ DR2, DX                    // 0f21d2
+	//TODO: MOVQ DR3, DX                    // 0f21da
+	//TODO: MOVQ DR2, R11                   // 410f21d3
+	//TODO: MOVQ DR3, R11                   // 410f21db
+	MOVAPD (BX), X2                         // 660f2813
+	MOVAPD (R11), X2                        // 66410f2813
+	MOVAPD X2, X2                           // 660f28d2 or 660f29d2
+	MOVAPD X11, X2                          // 66410f28d3 or 66440f29da
+	MOVAPD (BX), X11                        // 66440f281b
+	MOVAPD (R11), X11                       // 66450f281b
+	MOVAPD X2, X11                          // 66440f28da or 66410f29d3
+	MOVAPD X11, X11                         // 66450f28db or 66450f29db
+	MOVAPD X2, (BX)                         // 660f2913
+	MOVAPD X11, (BX)                        // 66440f291b
+	MOVAPD X2, (R11)                        // 66410f2913
+	MOVAPD X11, (R11)                       // 66450f291b
+	MOVAPS (BX), X2                         // 0f2813
+	MOVAPS (R11), X2                        // 410f2813
+	MOVAPS X2, X2                           // 0f28d2 or 0f29d2
+	MOVAPS X11, X2                          // 410f28d3 or 440f29da
+	MOVAPS (BX), X11                        // 440f281b
+	MOVAPS (R11), X11                       // 450f281b
+	MOVAPS X2, X11                          // 440f28da or 410f29d3
+	MOVAPS X11, X11                         // 450f28db or 450f29db
+	MOVAPS X2, (BX)                         // 0f2913
+	MOVAPS X11, (BX)                        // 440f291b
+	MOVAPS X2, (R11)                        // 410f2913
+	MOVAPS X11, (R11)                       // 450f291b
+	//TODO: MOVBEWW DX, (BX)                // 660f38f113
+	//TODO: MOVBEWW R11, (BX)               // 66440f38f11b
+	//TODO: MOVBEWW DX, (R11)               // 66410f38f113
+	//TODO: MOVBEWW R11, (R11)              // 66450f38f11b
+	//TODO: MOVBELL DX, (BX)                // 0f38f113
+	//TODO: MOVBELL R11, (BX)               // 440f38f11b
+	//TODO: MOVBELL DX, (R11)               // 410f38f113
+	//TODO: MOVBELL R11, (R11)              // 450f38f11b
+	//TODO: MOVBEQQ DX, (BX)                // 480f38f113
+	//TODO: MOVBEQQ R11, (BX)               // 4c0f38f11b
+	//TODO: MOVBEQQ DX, (R11)               // 490f38f113
+	//TODO: MOVBEQQ R11, (R11)              // 4d0f38f11b
+	//TODO: MOVBEWW (BX), DX                // 660f38f013
+	//TODO: MOVBEWW (R11), DX               // 66410f38f013
+	//TODO: MOVBEWW (BX), R11               // 66440f38f01b
+	//TODO: MOVBEWW (R11), R11              // 66450f38f01b
+	//TODO: MOVBELL (BX), DX                // 0f38f013
+	//TODO: MOVBELL (R11), DX               // 410f38f013
+	//TODO: MOVBELL (BX), R11               // 440f38f01b
+	//TODO: MOVBELL (R11), R11              // 450f38f01b
+	//TODO: MOVBEQQ (BX), DX                // 480f38f013
+	//TODO: MOVBEQQ (R11), DX               // 490f38f013
+	//TODO: MOVBEQQ (BX), R11               // 4c0f38f01b
+	//TODO: MOVBEQQ (R11), R11              // 4d0f38f01b
+	MOVQ (BX), M2                           // 0f6e13 or 0f6f13 or 480f6e13
+	MOVQ (R11), M2                          // 410f6e13 or 410f6f13 or 490f6e13
+	MOVQ DX, M2                             // 0f6ed2 or 480f6ed2
+	MOVQ R11, M2                            // 410f6ed3 or 490f6ed3
+	MOVQ (BX), M3                           // 0f6e1b or 0f6f1b or 480f6e1b
+	MOVQ (R11), M3                          // 410f6e1b or 410f6f1b or 490f6e1b
+	MOVQ DX, M3                             // 0f6eda or 480f6eda
+	MOVQ R11, M3                            // 410f6edb or 490f6edb
+	MOVQ M2, (BX)                           // 0f7e13 or 0f7f13 or 480f7e13
+	MOVQ M3, (BX)                           // 0f7e1b or 0f7f1b or 480f7e1b
+	MOVQ M2, (R11)                          // 410f7e13 or 410f7f13 or 490f7e13
+	MOVQ M3, (R11)                          // 410f7e1b or 410f7f1b or 490f7e1b
+	MOVQ M2, DX                             // 0f7ed2 or 480f7ed2
+	MOVQ M3, DX                             // 0f7eda or 480f7eda
+	MOVQ M2, R11                            // 410f7ed3 or 490f7ed3
+	MOVQ M3, R11                            // 410f7edb or 490f7edb
+	MOVQ X2, (BX)                           // 660f7e13 or 66480f7e13 or 660fd613
+	MOVQ X11, (BX)                          // 66440f7e1b or 664c0f7e1b or 66440fd61b
+	MOVQ X2, (R11)                          // 66410f7e13 or 66490f7e13 or 66410fd613
+	MOVQ X11, (R11)                         // 66450f7e1b or 664d0f7e1b or 66450fd61b
+	MOVQ X2, DX                             // 660f7ed2 or 66480f7ed2
+	MOVQ X11, DX                            // 66440f7eda or 664c0f7eda
+	MOVQ X2, R11                            // 66410f7ed3 or 66490f7ed3
+	MOVQ X11, R11                           // 66450f7edb or 664d0f7edb
+	MOVQ (BX), X2                           // 660f6e13 or 66480f6e13 or f30f7e13
+	MOVQ (R11), X2                          // 66410f6e13 or 66490f6e13 or f3410f7e13
+	MOVQ DX, X2                             // 660f6ed2 or 66480f6ed2
+	MOVQ R11, X2                            // 66410f6ed3 or 66490f6ed3
+	MOVQ (BX), X11                          // 66440f6e1b or 664c0f6e1b or f3440f7e1b
+	MOVQ (R11), X11                         // 66450f6e1b or 664d0f6e1b or f3450f7e1b
+	MOVQ DX, X11                            // 66440f6eda or 664c0f6eda
+	MOVQ R11, X11                           // 66450f6edb or 664d0f6edb
+	//TODO: MOVDDUP (BX), X2                // f20f1213
+	//TODO: MOVDDUP (R11), X2               // f2410f1213
+	//TODO: MOVDDUP X2, X2                  // f20f12d2
+	//TODO: MOVDDUP X11, X2                 // f2410f12d3
+	//TODO: MOVDDUP (BX), X11               // f2440f121b
+	//TODO: MOVDDUP (R11), X11              // f2450f121b
+	//TODO: MOVDDUP X2, X11                 // f2440f12da
+	//TODO: MOVDDUP X11, X11                // f2450f12db
+	MOVQ X2, M2                             // f20fd6d2
+	MOVQ X11, M2                            // f2410fd6d3
+	MOVQ X2, M3                             // f20fd6da
+	MOVQ X11, M3                            // f2410fd6db
+	MOVO (BX), X2                           // 660f6f13
+	MOVO (R11), X2                          // 66410f6f13
+	MOVO X2, X2                             // 660f6fd2 or 660f7fd2
+	MOVO X11, X2                            // 66410f6fd3 or 66440f7fda
+	MOVO (BX), X11                          // 66440f6f1b
+	MOVO (R11), X11                         // 66450f6f1b
+	MOVO X2, X11                            // 66440f6fda or 66410f7fd3
+	MOVO X11, X11                           // 66450f6fdb or 66450f7fdb
+	MOVO X2, (BX)                           // 660f7f13
+	MOVO X11, (BX)                          // 66440f7f1b
+	MOVO X2, (R11)                          // 66410f7f13
+	MOVO X11, (R11)                         // 66450f7f1b
+	MOVOU (BX), X2                          // f30f6f13
+	MOVOU (R11), X2                         // f3410f6f13
+	MOVOU X2, X2                            // f30f6fd2 or f30f7fd2
+	MOVOU X11, X2                           // f3410f6fd3 or f3440f7fda
+	MOVOU (BX), X11                         // f3440f6f1b
+	MOVOU (R11), X11                        // f3450f6f1b
+	MOVOU X2, X11                           // f3440f6fda or f3410f7fd3
+	MOVOU X11, X11                          // f3450f6fdb or f3450f7fdb
+	MOVOU X2, (BX)                          // f30f7f13
+	MOVOU X11, (BX)                         // f3440f7f1b
+	MOVOU X2, (R11)                         // f3410f7f13
+	MOVOU X11, (R11)                        // f3450f7f1b
+	MOVHLPS X2, X2                          // 0f12d2
+	MOVHLPS X11, X2                         // 410f12d3
+	MOVHLPS X2, X11                         // 440f12da
+	MOVHLPS X11, X11                        // 450f12db
+	MOVHPD X2, (BX)                         // 660f1713
+	MOVHPD X11, (BX)                        // 66440f171b
+	MOVHPD X2, (R11)                        // 66410f1713
+	MOVHPD X11, (R11)                       // 66450f171b
+	MOVHPD (BX), X2                         // 660f1613
+	MOVHPD (R11), X2                        // 66410f1613
+	MOVHPD (BX), X11                        // 66440f161b
+	MOVHPD (R11), X11                       // 66450f161b
+	MOVHPS X2, (BX)                         // 0f1713
+	MOVHPS X11, (BX)                        // 440f171b
+	MOVHPS X2, (R11)                        // 410f1713
+	MOVHPS X11, (R11)                       // 450f171b
+	MOVHPS (BX), X2                         // 0f1613
+	MOVHPS (R11), X2                        // 410f1613
+	MOVHPS (BX), X11                        // 440f161b
+	MOVHPS (R11), X11                       // 450f161b
+	MOVLHPS X2, X2                          // 0f16d2
+	MOVLHPS X11, X2                         // 410f16d3
+	MOVLHPS X2, X11                         // 440f16da
+	MOVLHPS X11, X11                        // 450f16db
+	MOVLPD X2, (BX)                         // 660f1313
+	MOVLPD X11, (BX)                        // 66440f131b
+	MOVLPD X2, (R11)                        // 66410f1313
+	MOVLPD X11, (R11)                       // 66450f131b
+	MOVLPD (BX), X2                         // 660f1213
+	MOVLPD (R11), X2                        // 66410f1213
+	MOVLPD (BX), X11                        // 66440f121b
+	MOVLPD (R11), X11                       // 66450f121b
+	MOVLPS X2, (BX)                         // 0f1313
+	MOVLPS X11, (BX)                        // 440f131b
+	MOVLPS X2, (R11)                        // 410f1313
+	MOVLPS X11, (R11)                       // 450f131b
+	MOVLPS (BX), X2                         // 0f1213
+	MOVLPS (R11), X2                        // 410f1213
+	MOVLPS (BX), X11                        // 440f121b
+	MOVLPS (R11), X11                       // 450f121b
+	MOVMSKPD X2, DX                         // 660f50d2
+	MOVMSKPD X11, DX                        // 66410f50d3
+	MOVMSKPD X2, R11                        // 66440f50da
+	MOVMSKPD X11, R11                       // 66450f50db
+	MOVMSKPS X2, DX                         // 0f50d2
+	MOVMSKPS X11, DX                        // 410f50d3
+	MOVMSKPS X2, R11                        // 440f50da
+	MOVMSKPS X11, R11                       // 450f50db
+	MOVNTO X2, (BX)                         // 660fe713
+	MOVNTO X11, (BX)                        // 66440fe71b
+	MOVNTO X2, (R11)                        // 66410fe713
+	MOVNTO X11, (R11)                       // 66450fe71b
+	//TODO: MOVNTDQA (BX), X2               // 660f382a13
+	//TODO: MOVNTDQA (R11), X2              // 66410f382a13
+	//TODO: MOVNTDQA (BX), X11              // 66440f382a1b
+	//TODO: MOVNTDQA (R11), X11             // 66450f382a1b
+	MOVNTIL DX, (BX)                        // 0fc313
+	MOVNTIL R11, (BX)                       // 440fc31b
+	MOVNTIL DX, (R11)                       // 410fc313
+	MOVNTIL R11, (R11)                      // 450fc31b
+	MOVNTIQ DX, (BX)                        // 480fc313
+	MOVNTIQ R11, (BX)                       // 4c0fc31b
+	MOVNTIQ DX, (R11)                       // 490fc313
+	MOVNTIQ R11, (R11)                      // 4d0fc31b
+	MOVNTPD X2, (BX)                        // 660f2b13
+	MOVNTPD X11, (BX)                       // 66440f2b1b
+	MOVNTPD X2, (R11)                       // 66410f2b13
+	MOVNTPD X11, (R11)                      // 66450f2b1b
+	MOVNTPS X2, (BX)                        // 0f2b13
+	MOVNTPS X11, (BX)                       // 440f2b1b
+	MOVNTPS X2, (R11)                       // 410f2b13
+	MOVNTPS X11, (R11)                      // 450f2b1b
+	MOVNTQ M2, (BX)                         // 0fe713
+	MOVNTQ M3, (BX)                         // 0fe71b
+	MOVNTQ M2, (R11)                        // 410fe713
+	MOVNTQ M3, (R11)                        // 410fe71b
+	//TODO: MOVNTSD X2, (BX)                // f20f2b13
+	//TODO: MOVNTSD X11, (BX)               // f2440f2b1b
+	//TODO: MOVNTSD X2, (R11)               // f2410f2b13
+	//TODO: MOVNTSD X11, (R11)              // f2450f2b1b
+	//TODO: MOVNTSS X2, (BX)                // f30f2b13
+	//TODO: MOVNTSS X11, (BX)               // f3440f2b1b
+	//TODO: MOVNTSS X2, (R11)               // f3410f2b13
+	//TODO: MOVNTSS X11, (R11)              // f3450f2b1b
+	//TODO: MOVQ M2, M2                     // 0f6fd2 or 0f7fd2
+	//TODO: MOVQ M3, M2                     // 0f6fd3 or 0f7fda
+	//TODO: MOVQ M2, M3                     // 0f6fda or 0f7fd3
+	//TODO: MOVQ M3, M3                     // 0f6fdb or 0f7fdb
+	MOVQ X2, X2                             // f30f7ed2 or 660fd6d2
+	MOVQ X11, X2                            // f3410f7ed3 or 66440fd6da
+	MOVQ X2, X11                            // f3440f7eda or 66410fd6d3
+	MOVQ X11, X11                           // f3450f7edb or 66450fd6db
+	MOVQOZX M2, X2                          // f30fd6d2
+	MOVQOZX M3, X2                          // f30fd6d3
+	MOVQOZX M2, X11                         // f3440fd6da
+	MOVQOZX M3, X11                         // f3440fd6db
+	MOVSB                                   // a4
+	MOVSL                                   // a5
+	//TODO: MOVSD (BX), X2                  // f20f1013
+	//TODO: MOVSD (R11), X2                 // f2410f1013
+	//TODO: MOVSD X2, X2                    // f20f10d2 or f20f11d2
+	//TODO: MOVSD X11, X2                   // f2410f10d3 or f2440f11da
+	//TODO: MOVSD (BX), X11                 // f2440f101b
+	//TODO: MOVSD (R11), X11                // f2450f101b
+	//TODO: MOVSD X2, X11                   // f2440f10da or f2410f11d3
+	//TODO: MOVSD X11, X11                  // f2450f10db or f2450f11db
+	//TODO: MOVSD X2, (BX)                  // f20f1113
+	//TODO: MOVSD X11, (BX)                 // f2440f111b
+	//TODO: MOVSD X2, (R11)                 // f2410f1113
+	//TODO: MOVSD X11, (R11)                // f2450f111b
+	//TODO: MOVSHDUP (BX), X2               // f30f1613
+	//TODO: MOVSHDUP (R11), X2              // f3410f1613
+	//TODO: MOVSHDUP X2, X2                 // f30f16d2
+	//TODO: MOVSHDUP X11, X2                // f3410f16d3
+	//TODO: MOVSHDUP (BX), X11              // f3440f161b
+	//TODO: MOVSHDUP (R11), X11             // f3450f161b
+	//TODO: MOVSHDUP X2, X11                // f3440f16da
+	//TODO: MOVSHDUP X11, X11               // f3450f16db
+	//TODO: MOVSLDUP (BX), X2               // f30f1213
+	//TODO: MOVSLDUP (R11), X2              // f3410f1213
+	//TODO: MOVSLDUP X2, X2                 // f30f12d2
+	//TODO: MOVSLDUP X11, X2                // f3410f12d3
+	//TODO: MOVSLDUP (BX), X11              // f3440f121b
+	//TODO: MOVSLDUP (R11), X11             // f3450f121b
+	//TODO: MOVSLDUP X2, X11                // f3440f12da
+	//TODO: MOVSLDUP X11, X11               // f3450f12db
+	MOVSQ                                   // 48a5
+	MOVSS (BX), X2                          // f30f1013
+	MOVSS (R11), X2                         // f3410f1013
+	MOVSS X2, X2                            // f30f10d2 or f30f11d2
+	MOVSS X11, X2                           // f3410f10d3 or f3440f11da
+	MOVSS (BX), X11                         // f3440f101b
+	MOVSS (R11), X11                        // f3450f101b
+	MOVSS X2, X11                           // f3440f10da or f3410f11d3
+	MOVSS X11, X11                          // f3450f10db or f3450f11db
+	MOVSS X2, (BX)                          // f30f1113
+	MOVSS X11, (BX)                         // f3440f111b
+	MOVSS X2, (R11)                         // f3410f1113
+	MOVSS X11, (R11)                        // f3450f111b
+	MOVSW                                   // 66a5
+	//TODO: MOVSWW (BX), DX                 // 660fbf13
+	//TODO: MOVSWW (R11), DX                // 66410fbf13
+	//TODO: MOVSWW DX, DX                   // 660fbfd2
+	//TODO: MOVSWW R11, DX                  // 66410fbfd3
+	//TODO: MOVSWW (BX), R11                // 66440fbf1b
+	//TODO: MOVSWW (R11), R11               // 66450fbf1b
+	//TODO: MOVSWW DX, R11                  // 66440fbfda
+	//TODO: MOVSWW R11, R11                 // 66450fbfdb
+	MOVBWSX (BX), DX                        // 660fbe13
+	MOVBWSX (R11), DX                       // 66410fbe13
+	MOVBWSX DL, DX                          // 660fbed2
+	MOVBWSX R11, DX                         // 66410fbed3
+	MOVBWSX (BX), R11                       // 66440fbe1b
+	MOVBWSX (R11), R11                      // 66450fbe1b
+	MOVBWSX DL, R11                         // 66440fbeda
+	MOVBWSX R11, R11                        // 66450fbedb
+	MOVWLSX (BX), DX                        // 0fbf13
+	MOVWLSX (R11), DX                       // 410fbf13
+	MOVWLSX DX, DX                          // 0fbfd2
+	MOVWLSX R11, DX                         // 410fbfd3
+	MOVWLSX (BX), R11                       // 440fbf1b
+	MOVWLSX (R11), R11                      // 450fbf1b
+	MOVWLSX DX, R11                         // 440fbfda
+	MOVWLSX R11, R11                        // 450fbfdb
+	MOVBLSX (BX), DX                        // 0fbe13
+	MOVBLSX (R11), DX                       // 410fbe13
+	MOVBLSX DL, DX                          // 0fbed2
+	MOVBLSX R11, DX                         // 410fbed3
+	MOVBLSX (BX), R11                       // 440fbe1b
+	MOVBLSX (R11), R11                      // 450fbe1b
+	MOVBLSX DL, R11                         // 440fbeda
+	MOVBLSX R11, R11                        // 450fbedb
+	MOVWQSX (BX), DX                        // 480fbf13 or 666313
+	MOVWQSX (R11), DX                       // 490fbf13 or 66416313
+	MOVWQSX DX, DX                          // 480fbfd2 or 6663d2
+	MOVWQSX R11, DX                         // 490fbfd3 or 664163d3
+	MOVWQSX (BX), R11                       // 4c0fbf1b or 6644631b
+	MOVWQSX (R11), R11                      // 4d0fbf1b or 6645631b
+	MOVWQSX DX, R11                         // 4c0fbfda or 664463da
+	MOVWQSX R11, R11                        // 4d0fbfdb or 664563db
+	MOVBQSX (BX), DX                        // 480fbe13
+	MOVBQSX (R11), DX                       // 490fbe13
+	MOVBQSX DL, DX                          // 480fbed2
+	MOVBQSX R11, DX                         // 490fbed3
+	MOVBQSX (BX), R11                       // 4c0fbe1b
+	MOVBQSX (R11), R11                      // 4d0fbe1b
+	MOVBQSX DL, R11                         // 4c0fbeda
+	MOVBQSX R11, R11                        // 4d0fbedb
+	MOVLQSX (BX), DX                        // 6313 or 486313
+	MOVLQSX (R11), DX                       // 416313 or 496313
+	MOVLQSX DX, DX                          // 63d2 or 4863d2
+	MOVLQSX R11, DX                         // 4163d3 or 4963d3
+	MOVLQSX (BX), R11                       // 44631b or 4c631b
+	MOVLQSX (R11), R11                      // 45631b or 4d631b
+	MOVLQSX DX, R11                         // 4463da or 4c63da
+	MOVLQSX R11, R11                        // 4563db or 4d63db
+	MOVUPD (BX), X2                         // 660f1013
+	MOVUPD (R11), X2                        // 66410f1013
+	MOVUPD X2, X2                           // 660f10d2 or 660f11d2
+	MOVUPD X11, X2                          // 66410f10d3 or 66440f11da
+	MOVUPD (BX), X11                        // 66440f101b
+	MOVUPD (R11), X11                       // 66450f101b
+	MOVUPD X2, X11                          // 66440f10da or 66410f11d3
+	MOVUPD X11, X11                         // 66450f10db or 66450f11db
+	MOVUPD X2, (BX)                         // 660f1113
+	MOVUPD X11, (BX)                        // 66440f111b
+	MOVUPD X2, (R11)                        // 66410f1113
+	MOVUPD X11, (R11)                       // 66450f111b
+	MOVUPS (BX), X2                         // 0f1013
+	MOVUPS (R11), X2                        // 410f1013
+	MOVUPS X2, X2                           // 0f10d2 or 0f11d2
+	MOVUPS X11, X2                          // 410f10d3 or 440f11da
+	MOVUPS (BX), X11                        // 440f101b
+	MOVUPS (R11), X11                       // 450f101b
+	MOVUPS X2, X11                          // 440f10da or 410f11d3
+	MOVUPS X11, X11                         // 450f10db or 450f11db
+	MOVUPS X2, (BX)                         // 0f1113
+	MOVUPS X11, (BX)                        // 440f111b
+	MOVUPS X2, (R11)                        // 410f1113
+	MOVUPS X11, (R11)                       // 450f111b
+	//TODO: MOVZWW (BX), DX                 // 660fb713
+	//TODO: MOVZWW (R11), DX                // 66410fb713
+	//TODO: MOVZWW DX, DX                   // 660fb7d2
+	//TODO: MOVZWW R11, DX                  // 66410fb7d3
+	//TODO: MOVZWW (BX), R11                // 66440fb71b
+	//TODO: MOVZWW (R11), R11               // 66450fb71b
+	//TODO: MOVZWW DX, R11                  // 66440fb7da
+	//TODO: MOVZWW R11, R11                 // 66450fb7db
+	MOVBWZX (BX), DX                        // 660fb613
+	MOVBWZX (R11), DX                       // 66410fb613
+	MOVBWZX DL, DX                          // 660fb6d2
+	MOVBWZX R11, DX                         // 66410fb6d3
+	MOVBWZX (BX), R11                       // 66440fb61b
+	MOVBWZX (R11), R11                      // 66450fb61b
+	MOVBWZX DL, R11                         // 66440fb6da
+	MOVBWZX R11, R11                        // 66450fb6db
+	MOVWLZX (BX), DX                        // 0fb713
+	MOVWLZX (R11), DX                       // 410fb713
+	MOVWLZX DX, DX                          // 0fb7d2
+	MOVWLZX R11, DX                         // 410fb7d3
+	MOVWLZX (BX), R11                       // 440fb71b
+	MOVWLZX (R11), R11                      // 450fb71b
+	MOVWLZX DX, R11                         // 440fb7da
+	MOVWLZX R11, R11                        // 450fb7db
+	MOVBLZX (BX), DX                        // 0fb613
+	MOVBLZX (R11), DX                       // 410fb613
+	MOVBLZX DL, DX                          // 0fb6d2
+	MOVBLZX R11, DX                         // 410fb6d3
+	MOVBLZX (BX), R11                       // 440fb61b
+	MOVBLZX (R11), R11                      // 450fb61b
+	MOVBLZX DL, R11                         // 440fb6da
+	MOVBLZX R11, R11                        // 450fb6db
+	MOVWQZX (BX), DX                        // 480fb713
+	MOVWQZX (R11), DX                       // 490fb713
+	MOVWQZX DX, DX                          // 480fb7d2
+	MOVWQZX R11, DX                         // 490fb7d3
+	MOVWQZX (BX), R11                       // 4c0fb71b
+	MOVWQZX (R11), R11                      // 4d0fb71b
+	MOVWQZX DX, R11                         // 4c0fb7da
+	MOVWQZX R11, R11                        // 4d0fb7db
+	//TODO: MOVBQZX (BX), DX                // 480fb613
+	//TODO: MOVBQZX (R11), DX               // 490fb613
+	//TODO: MOVBQZX DL, DX                  // 480fb6d2
+	//TODO: MOVBQZX R11, DX                 // 490fb6d3
+	//TODO: MOVBQZX (BX), R11               // 4c0fb61b
+	//TODO: MOVBQZX (R11), R11              // 4d0fb61b
+	//TODO: MOVBQZX DL, R11                 // 4c0fb6da
+	//TODO: MOVBQZX R11, R11                // 4d0fb6db
+	//TODO: MPSADBW $7, (BX), X2            // 660f3a421307
+	//TODO: MPSADBW $7, (R11), X2           // 66410f3a421307
+	//TODO: MPSADBW $7, X2, X2              // 660f3a42d207
+	//TODO: MPSADBW $7, X11, X2             // 66410f3a42d307
+	//TODO: MPSADBW $7, (BX), X11           // 66440f3a421b07
+	//TODO: MPSADBW $7, (R11), X11          // 66450f3a421b07
+	//TODO: MPSADBW $7, X2, X11             // 66440f3a42da07
+	//TODO: MPSADBW $7, X11, X11            // 66450f3a42db07
+	MULW (BX)                               // 66f723
+	MULW (R11)                              // 6641f723
+	MULW DX                                 // 66f7e2
+	MULW R11                                // 6641f7e3
+	MULL (BX)                               // f723
+	MULL (R11)                              // 41f723
+	MULL DX                                 // f7e2
+	MULL R11                                // 41f7e3
+	MULQ (BX)                               // 48f723
+	MULQ (R11)                              // 49f723
+	MULQ DX                                 // 48f7e2
+	MULQ R11                                // 49f7e3
+	MULB (BX)                               // f623
+	MULB (R11)                              // 41f623
+	MULB DL                                 // f6e2
+	MULB R11                                // 41f6e3
+	MULPD (BX), X2                          // 660f5913
+	MULPD (R11), X2                         // 66410f5913
+	MULPD X2, X2                            // 660f59d2
+	MULPD X11, X2                           // 66410f59d3
+	MULPD (BX), X11                         // 66440f591b
+	MULPD (R11), X11                        // 66450f591b
+	MULPD X2, X11                           // 66440f59da
+	MULPD X11, X11                          // 66450f59db
+	MULPS (BX), X2                          // 0f5913
+	MULPS (R11), X2                         // 410f5913
+	MULPS X2, X2                            // 0f59d2
+	MULPS X11, X2                           // 410f59d3
+	MULPS (BX), X11                         // 440f591b
+	MULPS (R11), X11                        // 450f591b
+	MULPS X2, X11                           // 440f59da
+	MULPS X11, X11                          // 450f59db
+	MULSD (BX), X2                          // f20f5913
+	MULSD (R11), X2                         // f2410f5913
+	MULSD X2, X2                            // f20f59d2
+	MULSD X11, X2                           // f2410f59d3
+	MULSD (BX), X11                         // f2440f591b
+	MULSD (R11), X11                        // f2450f591b
+	MULSD X2, X11                           // f2440f59da
+	MULSD X11, X11                          // f2450f59db
+	MULSS (BX), X2                          // f30f5913
+	MULSS (R11), X2                         // f3410f5913
+	MULSS X2, X2                            // f30f59d2
+	MULSS X11, X2                           // f3410f59d3
+	MULSS (BX), X11                         // f3440f591b
+	MULSS (R11), X11                        // f3450f591b
+	MULSS X2, X11                           // f3440f59da
+	MULSS X11, X11                          // f3450f59db
+	MULXL (BX), R9, DX                      // c4e233f613
+	MULXL (R11), R9, DX                     // c4c233f613
+	MULXL DX, R9, DX                        // c4e233f6d2
+	MULXL R11, R9, DX                       // c4c233f6d3
+	MULXL (BX), R9, R11                     // c46233f61b
+	MULXL (R11), R9, R11                    // c44233f61b
+	MULXL DX, R9, R11                       // c46233f6da
+	MULXL R11, R9, R11                      // c44233f6db
+	MULXQ (BX), R14, DX                     // c4e28bf613
+	MULXQ (R11), R14, DX                    // c4c28bf613
+	MULXQ DX, R14, DX                       // c4e28bf6d2
+	MULXQ R11, R14, DX                      // c4c28bf6d3
+	MULXQ (BX), R14, R11                    // c4628bf61b
+	MULXQ (R11), R14, R11                   // c4428bf61b
+	MULXQ DX, R14, R11                      // c4628bf6da
+	MULXQ R11, R14, R11                     // c4428bf6db
+	//TODO: MWAIT                           // 0f01c9
+	NEGW (BX)                               // 66f71b
+	NEGW (R11)                              // 6641f71b
+	NEGW DX                                 // 66f7da
+	NEGW R11                                // 6641f7db
+	NEGL (BX)                               // f71b
+	NEGL (R11)                              // 41f71b
+	NEGL DX                                 // f7da
+	NEGL R11                                // 41f7db
+	NEGQ (BX)                               // 48f71b
+	NEGQ (R11)                              // 49f71b
+	NEGQ DX                                 // 48f7da
+	NEGQ R11                                // 49f7db
+	NEGB (BX)                               // f61b
+	NEGB (R11)                              // 41f61b
+	NEGB DL                                 // f6da
+	NEGB R11                                // 41f6db
+	//TODO: NOPW (BX)                       // 660f1f03
+	//TODO: NOPW (R11)                      // 66410f1f03
+	//TODO: NOPW DX                         // 660f1fc2
+	//TODO: NOPW R11                        // 66410f1fc3
+	//TODO: NOPL (BX)                       // 0f1f03
+	//TODO: NOPL (R11)                      // 410f1f03
+	//TODO: NOPL DX                         // 0f1fc2
+	//TODO: NOPL R11                        // 410f1fc3
+	NOTW (BX)                               // 66f713
+	NOTW (R11)                              // 6641f713
+	NOTW DX                                 // 66f7d2
+	NOTW R11                                // 6641f7d3
+	NOTL (BX)                               // f713
+	NOTL (R11)                              // 41f713
+	NOTL DX                                 // f7d2
+	NOTL R11                                // 41f7d3
+	NOTQ (BX)                               // 48f713
+	NOTQ (R11)                              // 49f713
+	NOTQ DX                                 // 48f7d2
+	NOTQ R11                                // 49f7d3
+	NOTB (BX)                               // f613
+	NOTB (R11)                              // 41f613
+	NOTB DL                                 // f6d2
+	NOTB R11                                // 41f6d3
+	ORB $7, AL                              // 0c07
+	ORW $61731, AX                          // 660d23f1
+	ORL $4045620583, AX                     // 0d674523f1
+	ORQ $-249346713, AX                     // 480d674523f1
+	ORW $61731, (BX)                        // 66810b23f1
+	ORW $61731, (R11)                       // 6641810b23f1
+	ORW $61731, DX                          // 6681ca23f1
+	ORW $61731, R11                         // 664181cb23f1
+	ORW $7, (BX)                            // 66830b07
+	ORW $7, (R11)                           // 6641830b07
+	ORW $7, DX                              // 6683ca07
+	ORW $7, R11                             // 664183cb07
+	ORW DX, (BX)                            // 660913
+	ORW R11, (BX)                           // 6644091b
+	ORW DX, (R11)                           // 66410913
+	ORW R11, (R11)                          // 6645091b
+	ORW DX, DX                              // 6609d2 or 660bd2
+	ORW R11, DX                             // 664409da or 66410bd3
+	ORW DX, R11                             // 664109d3 or 66440bda
+	ORW R11, R11                            // 664509db or 66450bdb
+	ORL $4045620583, (BX)                   // 810b674523f1
+	ORL $4045620583, (R11)                  // 41810b674523f1
+	ORL $4045620583, DX                     // 81ca674523f1
+	ORL $4045620583, R11                    // 4181cb674523f1
+	ORL $7, (BX)                            // 830b07
+	ORL $7, (R11)                           // 41830b07
+	ORL $7, DX                              // 83ca07
+	ORL $7, R11                             // 4183cb07
+	ORL DX, (BX)                            // 0913
+	ORL R11, (BX)                           // 44091b
+	ORL DX, (R11)                           // 410913
+	ORL R11, (R11)                          // 45091b
+	ORL DX, DX                              // 09d2 or 0bd2
+	ORL R11, DX                             // 4409da or 410bd3
+	ORL DX, R11                             // 4109d3 or 440bda
+	ORL R11, R11                            // 4509db or 450bdb
+	ORQ $-249346713, (BX)                   // 48810b674523f1
+	ORQ $-249346713, (R11)                  // 49810b674523f1
+	ORQ $-249346713, DX                     // 4881ca674523f1
+	ORQ $-249346713, R11                    // 4981cb674523f1
+	ORQ $7, (BX)                            // 48830b07
+	ORQ $7, (R11)                           // 49830b07
+	ORQ $7, DX                              // 4883ca07
+	ORQ $7, R11                             // 4983cb07
+	ORQ DX, (BX)                            // 480913
+	ORQ R11, (BX)                           // 4c091b
+	ORQ DX, (R11)                           // 490913
+	ORQ R11, (R11)                          // 4d091b
+	ORQ DX, DX                              // 4809d2 or 480bd2
+	ORQ R11, DX                             // 4c09da or 490bd3
+	ORQ DX, R11                             // 4909d3 or 4c0bda
+	ORQ R11, R11                            // 4d09db or 4d0bdb
+	ORB $7, (BX)                            // 800b07
+	ORB $7, (R11)                           // 41800b07
+	ORB $7, DL                              // 80ca07
+	ORB $7, R11                             // 4180cb07
+	ORB DL, (BX)                            // 0813
+	ORB R11, (BX)                           // 44081b
+	ORB DL, (R11)                           // 410813
+	ORB R11, (R11)                          // 45081b
+	ORB DL, DL                              // 08d2 or 0ad2
+	ORB R11, DL                             // 4408da or 410ad3
+	ORB DL, R11                             // 4108d3 or 440ada
+	ORB R11, R11                            // 4508db or 450adb
+	ORW (BX), DX                            // 660b13
+	ORW (R11), DX                           // 66410b13
+	ORW (BX), R11                           // 66440b1b
+	ORW (R11), R11                          // 66450b1b
+	ORL (BX), DX                            // 0b13
+	ORL (R11), DX                           // 410b13
+	ORL (BX), R11                           // 440b1b
+	ORL (R11), R11                          // 450b1b
+	ORQ (BX), DX                            // 480b13
+	ORQ (R11), DX                           // 490b13
+	ORQ (BX), R11                           // 4c0b1b
+	ORQ (R11), R11                          // 4d0b1b
+	ORB (BX), DL                            // 0a13
+	ORB (R11), DL                           // 410a13
+	ORB (BX), R11                           // 440a1b
+	ORB (R11), R11                          // 450a1b
+	ORPD (BX), X2                           // 660f5613
+	ORPD (R11), X2                          // 66410f5613
+	ORPD X2, X2                             // 660f56d2
+	ORPD X11, X2                            // 66410f56d3
+	ORPD (BX), X11                          // 66440f561b
+	ORPD (R11), X11                         // 66450f561b
+	ORPD X2, X11                            // 66440f56da
+	ORPD X11, X11                           // 66450f56db
+	ORPS (BX), X2                           // 0f5613
+	ORPS (R11), X2                          // 410f5613
+	ORPS X2, X2                             // 0f56d2
+	ORPS X11, X2                            // 410f56d3
+	ORPS (BX), X11                          // 440f561b
+	ORPS (R11), X11                         // 450f561b
+	ORPS X2, X11                            // 440f56da
+	ORPS X11, X11                           // 450f56db
+	//TODO: OUTB AL, DX                     // ee
+	//TODO: OUTW AX, DX                     // 66ef
+	//TODO: OUTL AX, DX                     // ef
+	//TODO: OUTB AL, $7                     // e607
+	//TODO: OUTW AX, $7                     // 66e707
+	//TODO: OUTL AX, $7                     // e707
+	OUTSB                                   // 6e
+	OUTSL                                   // 6f
+	OUTSW                                   // 666f
+	//TODO: PABSB (BX), M2                  // 0f381c13
+	//TODO: PABSB (R11), M2                 // 410f381c13
+	//TODO: PABSB M2, M2                    // 0f381cd2
+	//TODO: PABSB M3, M2                    // 0f381cd3
+	//TODO: PABSB (BX), M3                  // 0f381c1b
+	//TODO: PABSB (R11), M3                 // 410f381c1b
+	//TODO: PABSB M2, M3                    // 0f381cda
+	//TODO: PABSB M3, M3                    // 0f381cdb
+	//TODO: PABSB (BX), X2                  // 660f381c13
+	//TODO: PABSB (R11), X2                 // 66410f381c13
+	//TODO: PABSB X2, X2                    // 660f381cd2
+	//TODO: PABSB X11, X2                   // 66410f381cd3
+	//TODO: PABSB (BX), X11                 // 66440f381c1b
+	//TODO: PABSB (R11), X11                // 66450f381c1b
+	//TODO: PABSB X2, X11                   // 66440f381cda
+	//TODO: PABSB X11, X11                  // 66450f381cdb
+	//TODO: PABSD (BX), M2                  // 0f381e13
+	//TODO: PABSD (R11), M2                 // 410f381e13
+	//TODO: PABSD M2, M2                    // 0f381ed2
+	//TODO: PABSD M3, M2                    // 0f381ed3
+	//TODO: PABSD (BX), M3                  // 0f381e1b
+	//TODO: PABSD (R11), M3                 // 410f381e1b
+	//TODO: PABSD M2, M3                    // 0f381eda
+	//TODO: PABSD M3, M3                    // 0f381edb
+	//TODO: PABSD (BX), X2                  // 660f381e13
+	//TODO: PABSD (R11), X2                 // 66410f381e13
+	//TODO: PABSD X2, X2                    // 660f381ed2
+	//TODO: PABSD X11, X2                   // 66410f381ed3
+	//TODO: PABSD (BX), X11                 // 66440f381e1b
+	//TODO: PABSD (R11), X11                // 66450f381e1b
+	//TODO: PABSD X2, X11                   // 66440f381eda
+	//TODO: PABSD X11, X11                  // 66450f381edb
+	//TODO: PABSW (BX), M2                  // 0f381d13
+	//TODO: PABSW (R11), M2                 // 410f381d13
+	//TODO: PABSW M2, M2                    // 0f381dd2
+	//TODO: PABSW M3, M2                    // 0f381dd3
+	//TODO: PABSW (BX), M3                  // 0f381d1b
+	//TODO: PABSW (R11), M3                 // 410f381d1b
+	//TODO: PABSW M2, M3                    // 0f381dda
+	//TODO: PABSW M3, M3                    // 0f381ddb
+	//TODO: PABSW (BX), X2                  // 660f381d13
+	//TODO: PABSW (R11), X2                 // 66410f381d13
+	//TODO: PABSW X2, X2                    // 660f381dd2
+	//TODO: PABSW X11, X2                   // 66410f381dd3
+	//TODO: PABSW (BX), X11                 // 66440f381d1b
+	//TODO: PABSW (R11), X11                // 66450f381d1b
+	//TODO: PABSW X2, X11                   // 66440f381dda
+	//TODO: PABSW X11, X11                  // 66450f381ddb
+	PACKSSLW (BX), M2                       // 0f6b13
+	PACKSSLW (R11), M2                      // 410f6b13
+	PACKSSLW M2, M2                         // 0f6bd2
+	PACKSSLW M3, M2                         // 0f6bd3
+	PACKSSLW (BX), M3                       // 0f6b1b
+	PACKSSLW (R11), M3                      // 410f6b1b
+	PACKSSLW M2, M3                         // 0f6bda
+	PACKSSLW M3, M3                         // 0f6bdb
+	PACKSSLW (BX), X2                       // 660f6b13
+	PACKSSLW (R11), X2                      // 66410f6b13
+	PACKSSLW X2, X2                         // 660f6bd2
+	PACKSSLW X11, X2                        // 66410f6bd3
+	PACKSSLW (BX), X11                      // 66440f6b1b
+	PACKSSLW (R11), X11                     // 66450f6b1b
+	PACKSSLW X2, X11                        // 66440f6bda
+	PACKSSLW X11, X11                       // 66450f6bdb
+	PACKSSWB (BX), M2                       // 0f6313
+	PACKSSWB (R11), M2                      // 410f6313
+	PACKSSWB M2, M2                         // 0f63d2
+	PACKSSWB M3, M2                         // 0f63d3
+	PACKSSWB (BX), M3                       // 0f631b
+	PACKSSWB (R11), M3                      // 410f631b
+	PACKSSWB M2, M3                         // 0f63da
+	PACKSSWB M3, M3                         // 0f63db
+	PACKSSWB (BX), X2                       // 660f6313
+	PACKSSWB (R11), X2                      // 66410f6313
+	PACKSSWB X2, X2                         // 660f63d2
+	PACKSSWB X11, X2                        // 66410f63d3
+	PACKSSWB (BX), X11                      // 66440f631b
+	PACKSSWB (R11), X11                     // 66450f631b
+	PACKSSWB X2, X11                        // 66440f63da
+	PACKSSWB X11, X11                       // 66450f63db
+	//TODO: PACKUSDW (BX), X2               // 660f382b13
+	//TODO: PACKUSDW (R11), X2              // 66410f382b13
+	//TODO: PACKUSDW X2, X2                 // 660f382bd2
+	//TODO: PACKUSDW X11, X2                // 66410f382bd3
+	//TODO: PACKUSDW (BX), X11              // 66440f382b1b
+	//TODO: PACKUSDW (R11), X11             // 66450f382b1b
+	//TODO: PACKUSDW X2, X11                // 66440f382bda
+	//TODO: PACKUSDW X11, X11               // 66450f382bdb
+	PACKUSWB (BX), M2                       // 0f6713
+	PACKUSWB (R11), M2                      // 410f6713
+	PACKUSWB M2, M2                         // 0f67d2
+	PACKUSWB M3, M2                         // 0f67d3
+	PACKUSWB (BX), M3                       // 0f671b
+	PACKUSWB (R11), M3                      // 410f671b
+	PACKUSWB M2, M3                         // 0f67da
+	PACKUSWB M3, M3                         // 0f67db
+	PACKUSWB (BX), X2                       // 660f6713
+	PACKUSWB (R11), X2                      // 66410f6713
+	PACKUSWB X2, X2                         // 660f67d2
+	PACKUSWB X11, X2                        // 66410f67d3
+	PACKUSWB (BX), X11                      // 66440f671b
+	PACKUSWB (R11), X11                     // 66450f671b
+	PACKUSWB X2, X11                        // 66440f67da
+	PACKUSWB X11, X11                       // 66450f67db
+	PADDB (BX), M2                          // 0ffc13
+	PADDB (R11), M2                         // 410ffc13
+	PADDB M2, M2                            // 0ffcd2
+	PADDB M3, M2                            // 0ffcd3
+	PADDB (BX), M3                          // 0ffc1b
+	PADDB (R11), M3                         // 410ffc1b
+	PADDB M2, M3                            // 0ffcda
+	PADDB M3, M3                            // 0ffcdb
+	PADDB (BX), X2                          // 660ffc13
+	PADDB (R11), X2                         // 66410ffc13
+	PADDB X2, X2                            // 660ffcd2
+	PADDB X11, X2                           // 66410ffcd3
+	PADDB (BX), X11                         // 66440ffc1b
+	PADDB (R11), X11                        // 66450ffc1b
+	PADDB X2, X11                           // 66440ffcda
+	PADDB X11, X11                          // 66450ffcdb
+	PADDL (BX), M2                          // 0ffe13
+	PADDL (R11), M2                         // 410ffe13
+	PADDL M2, M2                            // 0ffed2
+	PADDL M3, M2                            // 0ffed3
+	PADDL (BX), M3                          // 0ffe1b
+	PADDL (R11), M3                         // 410ffe1b
+	PADDL M2, M3                            // 0ffeda
+	PADDL M3, M3                            // 0ffedb
+	PADDL (BX), X2                          // 660ffe13
+	PADDL (R11), X2                         // 66410ffe13
+	PADDL X2, X2                            // 660ffed2
+	PADDL X11, X2                           // 66410ffed3
+	PADDL (BX), X11                         // 66440ffe1b
+	PADDL (R11), X11                        // 66450ffe1b
+	PADDL X2, X11                           // 66440ffeda
+	PADDL X11, X11                          // 66450ffedb
+	//TODO: PADDQ (BX), M2                  // 0fd413
+	//TODO: PADDQ (R11), M2                 // 410fd413
+	//TODO: PADDQ M2, M2                    // 0fd4d2
+	//TODO: PADDQ M3, M2                    // 0fd4d3
+	//TODO: PADDQ (BX), M3                  // 0fd41b
+	//TODO: PADDQ (R11), M3                 // 410fd41b
+	//TODO: PADDQ M2, M3                    // 0fd4da
+	//TODO: PADDQ M3, M3                    // 0fd4db
+	PADDQ (BX), X2                          // 660fd413
+	PADDQ (R11), X2                         // 66410fd413
+	PADDQ X2, X2                            // 660fd4d2
+	PADDQ X11, X2                           // 66410fd4d3
+	PADDQ (BX), X11                         // 66440fd41b
+	PADDQ (R11), X11                        // 66450fd41b
+	PADDQ X2, X11                           // 66440fd4da
+	PADDQ X11, X11                          // 66450fd4db
+	PADDSB (BX), M2                         // 0fec13
+	PADDSB (R11), M2                        // 410fec13
+	PADDSB M2, M2                           // 0fecd2
+	PADDSB M3, M2                           // 0fecd3
+	PADDSB (BX), M3                         // 0fec1b
+	PADDSB (R11), M3                        // 410fec1b
+	PADDSB M2, M3                           // 0fecda
+	PADDSB M3, M3                           // 0fecdb
+	PADDSB (BX), X2                         // 660fec13
+	PADDSB (R11), X2                        // 66410fec13
+	PADDSB X2, X2                           // 660fecd2
+	PADDSB X11, X2                          // 66410fecd3
+	PADDSB (BX), X11                        // 66440fec1b
+	PADDSB (R11), X11                       // 66450fec1b
+	PADDSB X2, X11                          // 66440fecda
+	PADDSB X11, X11                         // 66450fecdb
+	PADDSW (BX), M2                         // 0fed13
+	PADDSW (R11), M2                        // 410fed13
+	PADDSW M2, M2                           // 0fedd2
+	PADDSW M3, M2                           // 0fedd3
+	PADDSW (BX), M3                         // 0fed1b
+	PADDSW (R11), M3                        // 410fed1b
+	PADDSW M2, M3                           // 0fedda
+	PADDSW M3, M3                           // 0feddb
+	PADDSW (BX), X2                         // 660fed13
+	PADDSW (R11), X2                        // 66410fed13
+	PADDSW X2, X2                           // 660fedd2
+	PADDSW X11, X2                          // 66410fedd3
+	PADDSW (BX), X11                        // 66440fed1b
+	PADDSW (R11), X11                       // 66450fed1b
+	PADDSW X2, X11                          // 66440fedda
+	PADDSW X11, X11                         // 66450feddb
+	PADDUSB (BX), M2                        // 0fdc13
+	PADDUSB (R11), M2                       // 410fdc13
+	PADDUSB M2, M2                          // 0fdcd2
+	PADDUSB M3, M2                          // 0fdcd3
+	PADDUSB (BX), M3                        // 0fdc1b
+	PADDUSB (R11), M3                       // 410fdc1b
+	PADDUSB M2, M3                          // 0fdcda
+	PADDUSB M3, M3                          // 0fdcdb
+	PADDUSB (BX), X2                        // 660fdc13
+	PADDUSB (R11), X2                       // 66410fdc13
+	PADDUSB X2, X2                          // 660fdcd2
+	PADDUSB X11, X2                         // 66410fdcd3
+	PADDUSB (BX), X11                       // 66440fdc1b
+	PADDUSB (R11), X11                      // 66450fdc1b
+	PADDUSB X2, X11                         // 66440fdcda
+	PADDUSB X11, X11                        // 66450fdcdb
+	PADDUSW (BX), M2                        // 0fdd13
+	PADDUSW (R11), M2                       // 410fdd13
+	PADDUSW M2, M2                          // 0fddd2
+	PADDUSW M3, M2                          // 0fddd3
+	PADDUSW (BX), M3                        // 0fdd1b
+	PADDUSW (R11), M3                       // 410fdd1b
+	PADDUSW M2, M3                          // 0fddda
+	PADDUSW M3, M3                          // 0fdddb
+	PADDUSW (BX), X2                        // 660fdd13
+	PADDUSW (R11), X2                       // 66410fdd13
+	PADDUSW X2, X2                          // 660fddd2
+	PADDUSW X11, X2                         // 66410fddd3
+	PADDUSW (BX), X11                       // 66440fdd1b
+	PADDUSW (R11), X11                      // 66450fdd1b
+	PADDUSW X2, X11                         // 66440fddda
+	PADDUSW X11, X11                        // 66450fdddb
+	PADDW (BX), M2                          // 0ffd13
+	PADDW (R11), M2                         // 410ffd13
+	PADDW M2, M2                            // 0ffdd2
+	PADDW M3, M2                            // 0ffdd3
+	PADDW (BX), M3                          // 0ffd1b
+	PADDW (R11), M3                         // 410ffd1b
+	PADDW M2, M3                            // 0ffdda
+	PADDW M3, M3                            // 0ffddb
+	PADDW (BX), X2                          // 660ffd13
+	PADDW (R11), X2                         // 66410ffd13
+	PADDW X2, X2                            // 660ffdd2
+	PADDW X11, X2                           // 66410ffdd3
+	PADDW (BX), X11                         // 66440ffd1b
+	PADDW (R11), X11                        // 66450ffd1b
+	PADDW X2, X11                           // 66440ffdda
+	PADDW X11, X11                          // 66450ffddb
+	//TODO: PALIGNR $7, (BX), M2            // 0f3a0f1307
+	//TODO: PALIGNR $7, (R11), M2           // 410f3a0f1307
+	//TODO: PALIGNR $7, M2, M2              // 0f3a0fd207
+	//TODO: PALIGNR $7, M3, M2              // 0f3a0fd307
+	//TODO: PALIGNR $7, (BX), M3            // 0f3a0f1b07
+	//TODO: PALIGNR $7, (R11), M3           // 410f3a0f1b07
+	//TODO: PALIGNR $7, M2, M3              // 0f3a0fda07
+	//TODO: PALIGNR $7, M3, M3              // 0f3a0fdb07
+	//TODO: PALIGNR $7, (BX), X2            // 660f3a0f1307
+	//TODO: PALIGNR $7, (R11), X2           // 66410f3a0f1307
+	//TODO: PALIGNR $7, X2, X2              // 660f3a0fd207
+	//TODO: PALIGNR $7, X11, X2             // 66410f3a0fd307
+	//TODO: PALIGNR $7, (BX), X11           // 66440f3a0f1b07
+	//TODO: PALIGNR $7, (R11), X11          // 66450f3a0f1b07
+	//TODO: PALIGNR $7, X2, X11             // 66440f3a0fda07
+	//TODO: PALIGNR $7, X11, X11            // 66450f3a0fdb07
+	PAND (BX), M2                           // 0fdb13
+	PAND (R11), M2                          // 410fdb13
+	PAND M2, M2                             // 0fdbd2
+	PAND M3, M2                             // 0fdbd3
+	PAND (BX), M3                           // 0fdb1b
+	PAND (R11), M3                          // 410fdb1b
+	PAND M2, M3                             // 0fdbda
+	PAND M3, M3                             // 0fdbdb
+	PAND (BX), X2                           // 660fdb13
+	PAND (R11), X2                          // 66410fdb13
+	PAND X2, X2                             // 660fdbd2
+	PAND X11, X2                            // 66410fdbd3
+	PAND (BX), X11                          // 66440fdb1b
+	PAND (R11), X11                         // 66450fdb1b
+	PAND X2, X11                            // 66440fdbda
+	PAND X11, X11                           // 66450fdbdb
+	PANDN (BX), M2                          // 0fdf13
+	PANDN (R11), M2                         // 410fdf13
+	PANDN M2, M2                            // 0fdfd2
+	PANDN M3, M2                            // 0fdfd3
+	PANDN (BX), M3                          // 0fdf1b
+	PANDN (R11), M3                         // 410fdf1b
+	PANDN M2, M3                            // 0fdfda
+	PANDN M3, M3                            // 0fdfdb
+	PANDN (BX), X2                          // 660fdf13
+	PANDN (R11), X2                         // 66410fdf13
+	PANDN X2, X2                            // 660fdfd2
+	PANDN X11, X2                           // 66410fdfd3
+	PANDN (BX), X11                         // 66440fdf1b
+	PANDN (R11), X11                        // 66450fdf1b
+	PANDN X2, X11                           // 66440fdfda
+	PANDN X11, X11                          // 66450fdfdb
+	PAVGB (BX), M2                          // 0fe013
+	PAVGB (R11), M2                         // 410fe013
+	PAVGB M2, M2                            // 0fe0d2
+	PAVGB M3, M2                            // 0fe0d3
+	PAVGB (BX), M3                          // 0fe01b
+	PAVGB (R11), M3                         // 410fe01b
+	PAVGB M2, M3                            // 0fe0da
+	PAVGB M3, M3                            // 0fe0db
+	PAVGB (BX), X2                          // 660fe013
+	PAVGB (R11), X2                         // 66410fe013
+	PAVGB X2, X2                            // 660fe0d2
+	PAVGB X11, X2                           // 66410fe0d3
+	PAVGB (BX), X11                         // 66440fe01b
+	PAVGB (R11), X11                        // 66450fe01b
+	PAVGB X2, X11                           // 66440fe0da
+	PAVGB X11, X11                          // 66450fe0db
+	PAVGW (BX), M2                          // 0fe313
+	PAVGW (R11), M2                         // 410fe313
+	PAVGW M2, M2                            // 0fe3d2
+	PAVGW M3, M2                            // 0fe3d3
+	PAVGW (BX), M3                          // 0fe31b
+	PAVGW (R11), M3                         // 410fe31b
+	PAVGW M2, M3                            // 0fe3da
+	PAVGW M3, M3                            // 0fe3db
+	PAVGW (BX), X2                          // 660fe313
+	PAVGW (R11), X2                         // 66410fe313
+	PAVGW X2, X2                            // 660fe3d2
+	PAVGW X11, X2                           // 66410fe3d3
+	PAVGW (BX), X11                         // 66440fe31b
+	PAVGW (R11), X11                        // 66450fe31b
+	PAVGW X2, X11                           // 66440fe3da
+	PAVGW X11, X11                          // 66450fe3db
+	//TODO: PBLENDVB XMM0, (BX), X2         // 660f381013
+	//TODO: PBLENDVB XMM0, (R11), X2        // 66410f381013
+	//TODO: PBLENDVB XMM0, X2, X2           // 660f3810d2
+	//TODO: PBLENDVB XMM0, X11, X2          // 66410f3810d3
+	//TODO: PBLENDVB XMM0, (BX), X11        // 66440f38101b
+	//TODO: PBLENDVB XMM0, (R11), X11       // 66450f38101b
+	//TODO: PBLENDVB XMM0, X2, X11          // 66440f3810da
+	//TODO: PBLENDVB XMM0, X11, X11         // 66450f3810db
+	//TODO: PBLENDW $7, (BX), X2            // 660f3a0e1307
+	//TODO: PBLENDW $7, (R11), X2           // 66410f3a0e1307
+	//TODO: PBLENDW $7, X2, X2              // 660f3a0ed207
+	//TODO: PBLENDW $7, X11, X2             // 66410f3a0ed307
+	//TODO: PBLENDW $7, (BX), X11           // 66440f3a0e1b07
+	//TODO: PBLENDW $7, (R11), X11          // 66450f3a0e1b07
+	//TODO: PBLENDW $7, X2, X11             // 66440f3a0eda07
+	//TODO: PBLENDW $7, X11, X11            // 66450f3a0edb07
+	PCLMULQDQ $7, (BX), X2                  // 660f3a441307
+	PCLMULQDQ $7, (R11), X2                 // 66410f3a441307
+	PCLMULQDQ $7, X2, X2                    // 660f3a44d207
+	PCLMULQDQ $7, X11, X2                   // 66410f3a44d307
+	PCLMULQDQ $7, (BX), X11                 // 66440f3a441b07
+	PCLMULQDQ $7, (R11), X11                // 66450f3a441b07
+	PCLMULQDQ $7, X2, X11                   // 66440f3a44da07
+	PCLMULQDQ $7, X11, X11                  // 66450f3a44db07
+	PCMPEQB (BX), M2                        // 0f7413
+	PCMPEQB (R11), M2                       // 410f7413
+	PCMPEQB M2, M2                          // 0f74d2
+	PCMPEQB M3, M2                          // 0f74d3
+	PCMPEQB (BX), M3                        // 0f741b
+	PCMPEQB (R11), M3                       // 410f741b
+	PCMPEQB M2, M3                          // 0f74da
+	PCMPEQB M3, M3                          // 0f74db
+	PCMPEQB (BX), X2                        // 660f7413
+	PCMPEQB (R11), X2                       // 66410f7413
+	PCMPEQB X2, X2                          // 660f74d2
+	PCMPEQB X11, X2                         // 66410f74d3
+	PCMPEQB (BX), X11                       // 66440f741b
+	PCMPEQB (R11), X11                      // 66450f741b
+	PCMPEQB X2, X11                         // 66440f74da
+	PCMPEQB X11, X11                        // 66450f74db
+	PCMPEQL (BX), M2                        // 0f7613
+	PCMPEQL (R11), M2                       // 410f7613
+	PCMPEQL M2, M2                          // 0f76d2
+	PCMPEQL M3, M2                          // 0f76d3
+	PCMPEQL (BX), M3                        // 0f761b
+	PCMPEQL (R11), M3                       // 410f761b
+	PCMPEQL M2, M3                          // 0f76da
+	PCMPEQL M3, M3                          // 0f76db
+	PCMPEQL (BX), X2                        // 660f7613
+	PCMPEQL (R11), X2                       // 66410f7613
+	PCMPEQL X2, X2                          // 660f76d2
+	PCMPEQL X11, X2                         // 66410f76d3
+	PCMPEQL (BX), X11                       // 66440f761b
+	PCMPEQL (R11), X11                      // 66450f761b
+	PCMPEQL X2, X11                         // 66440f76da
+	PCMPEQL X11, X11                        // 66450f76db
+	//TODO: PCMPEQQ (BX), X2                // 660f382913
+	//TODO: PCMPEQQ (R11), X2               // 66410f382913
+	//TODO: PCMPEQQ X2, X2                  // 660f3829d2
+	//TODO: PCMPEQQ X11, X2                 // 66410f3829d3
+	//TODO: PCMPEQQ (BX), X11               // 66440f38291b
+	//TODO: PCMPEQQ (R11), X11              // 66450f38291b
+	//TODO: PCMPEQQ X2, X11                 // 66440f3829da
+	//TODO: PCMPEQQ X11, X11                // 66450f3829db
+	PCMPEQW (BX), M2                        // 0f7513
+	PCMPEQW (R11), M2                       // 410f7513
+	PCMPEQW M2, M2                          // 0f75d2
+	PCMPEQW M3, M2                          // 0f75d3
+	PCMPEQW (BX), M3                        // 0f751b
+	PCMPEQW (R11), M3                       // 410f751b
+	PCMPEQW M2, M3                          // 0f75da
+	PCMPEQW M3, M3                          // 0f75db
+	PCMPEQW (BX), X2                        // 660f7513
+	PCMPEQW (R11), X2                       // 66410f7513
+	PCMPEQW X2, X2                          // 660f75d2
+	PCMPEQW X11, X2                         // 66410f75d3
+	PCMPEQW (BX), X11                       // 66440f751b
+	PCMPEQW (R11), X11                      // 66450f751b
+	PCMPEQW X2, X11                         // 66440f75da
+	PCMPEQW X11, X11                        // 66450f75db
+	//TODO: PCMPESTRI $7, (BX), X2          // 660f3a611307
+	//TODO: PCMPESTRI $7, (R11), X2         // 66410f3a611307
+	//TODO: PCMPESTRI $7, X2, X2            // 660f3a61d207
+	//TODO: PCMPESTRI $7, X11, X2           // 66410f3a61d307
+	//TODO: PCMPESTRI $7, (BX), X11         // 66440f3a611b07
+	//TODO: PCMPESTRI $7, (R11), X11        // 66450f3a611b07
+	//TODO: PCMPESTRI $7, X2, X11           // 66440f3a61da07
+	//TODO: PCMPESTRI $7, X11, X11          // 66450f3a61db07
+	//TODO: PCMPESTRM $7, (BX), X2          // 660f3a601307
+	//TODO: PCMPESTRM $7, (R11), X2         // 66410f3a601307
+	//TODO: PCMPESTRM $7, X2, X2            // 660f3a60d207
+	//TODO: PCMPESTRM $7, X11, X2           // 66410f3a60d307
+	//TODO: PCMPESTRM $7, (BX), X11         // 66440f3a601b07
+	//TODO: PCMPESTRM $7, (R11), X11        // 66450f3a601b07
+	//TODO: PCMPESTRM $7, X2, X11           // 66440f3a60da07
+	//TODO: PCMPESTRM $7, X11, X11          // 66450f3a60db07
+	PCMPGTB (BX), M2                        // 0f6413
+	PCMPGTB (R11), M2                       // 410f6413
+	PCMPGTB M2, M2                          // 0f64d2
+	PCMPGTB M3, M2                          // 0f64d3
+	PCMPGTB (BX), M3                        // 0f641b
+	PCMPGTB (R11), M3                       // 410f641b
+	PCMPGTB M2, M3                          // 0f64da
+	PCMPGTB M3, M3                          // 0f64db
+	PCMPGTB (BX), X2                        // 660f6413
+	PCMPGTB (R11), X2                       // 66410f6413
+	PCMPGTB X2, X2                          // 660f64d2
+	PCMPGTB X11, X2                         // 66410f64d3
+	PCMPGTB (BX), X11                       // 66440f641b
+	PCMPGTB (R11), X11                      // 66450f641b
+	PCMPGTB X2, X11                         // 66440f64da
+	PCMPGTB X11, X11                        // 66450f64db
+	PCMPGTL (BX), M2                        // 0f6613
+	PCMPGTL (R11), M2                       // 410f6613
+	PCMPGTL M2, M2                          // 0f66d2
+	PCMPGTL M3, M2                          // 0f66d3
+	PCMPGTL (BX), M3                        // 0f661b
+	PCMPGTL (R11), M3                       // 410f661b
+	PCMPGTL M2, M3                          // 0f66da
+	PCMPGTL M3, M3                          // 0f66db
+	PCMPGTL (BX), X2                        // 660f6613
+	PCMPGTL (R11), X2                       // 66410f6613
+	PCMPGTL X2, X2                          // 660f66d2
+	PCMPGTL X11, X2                         // 66410f66d3
+	PCMPGTL (BX), X11                       // 66440f661b
+	PCMPGTL (R11), X11                      // 66450f661b
+	PCMPGTL X2, X11                         // 66440f66da
+	PCMPGTL X11, X11                        // 66450f66db
+	//TODO: PCMPGTQ (BX), X2                // 660f383713
+	//TODO: PCMPGTQ (R11), X2               // 66410f383713
+	//TODO: PCMPGTQ X2, X2                  // 660f3837d2
+	//TODO: PCMPGTQ X11, X2                 // 66410f3837d3
+	//TODO: PCMPGTQ (BX), X11               // 66440f38371b
+	//TODO: PCMPGTQ (R11), X11              // 66450f38371b
+	//TODO: PCMPGTQ X2, X11                 // 66440f3837da
+	//TODO: PCMPGTQ X11, X11                // 66450f3837db
+	PCMPGTW (BX), M2                        // 0f6513
+	PCMPGTW (R11), M2                       // 410f6513
+	PCMPGTW M2, M2                          // 0f65d2
+	PCMPGTW M3, M2                          // 0f65d3
+	PCMPGTW (BX), M3                        // 0f651b
+	PCMPGTW (R11), M3                       // 410f651b
+	PCMPGTW M2, M3                          // 0f65da
+	PCMPGTW M3, M3                          // 0f65db
+	PCMPGTW (BX), X2                        // 660f6513
+	PCMPGTW (R11), X2                       // 66410f6513
+	PCMPGTW X2, X2                          // 660f65d2
+	PCMPGTW X11, X2                         // 66410f65d3
+	PCMPGTW (BX), X11                       // 66440f651b
+	PCMPGTW (R11), X11                      // 66450f651b
+	PCMPGTW X2, X11                         // 66440f65da
+	PCMPGTW X11, X11                        // 66450f65db
+	//TODO: PCMPISTRI $7, (BX), X2          // 660f3a631307
+	//TODO: PCMPISTRI $7, (R11), X2         // 66410f3a631307
+	//TODO: PCMPISTRI $7, X2, X2            // 660f3a63d207
+	//TODO: PCMPISTRI $7, X11, X2           // 66410f3a63d307
+	//TODO: PCMPISTRI $7, (BX), X11         // 66440f3a631b07
+	//TODO: PCMPISTRI $7, (R11), X11        // 66450f3a631b07
+	//TODO: PCMPISTRI $7, X2, X11           // 66440f3a63da07
+	//TODO: PCMPISTRI $7, X11, X11          // 66450f3a63db07
+	//TODO: PCMPISTRM $7, (BX), X2          // 660f3a621307
+	//TODO: PCMPISTRM $7, (R11), X2         // 66410f3a621307
+	//TODO: PCMPISTRM $7, X2, X2            // 660f3a62d207
+	//TODO: PCMPISTRM $7, X11, X2           // 66410f3a62d307
+	//TODO: PCMPISTRM $7, (BX), X11         // 66440f3a621b07
+	//TODO: PCMPISTRM $7, (R11), X11        // 66450f3a621b07
+	//TODO: PCMPISTRM $7, X2, X11           // 66440f3a62da07
+	//TODO: PCMPISTRM $7, X11, X11          // 66450f3a62db07
+	PDEPL (BX), R9, DX                      // c4e233f513
+	PDEPL (R11), R9, DX                     // c4c233f513
+	PDEPL DX, R9, DX                        // c4e233f5d2
+	PDEPL R11, R9, DX                       // c4c233f5d3
+	PDEPL (BX), R9, R11                     // c46233f51b
+	PDEPL (R11), R9, R11                    // c44233f51b
+	PDEPL DX, R9, R11                       // c46233f5da
+	PDEPL R11, R9, R11                      // c44233f5db
+	PDEPQ (BX), R14, DX                     // c4e28bf513
+	PDEPQ (R11), R14, DX                    // c4c28bf513
+	PDEPQ DX, R14, DX                       // c4e28bf5d2
+	PDEPQ R11, R14, DX                      // c4c28bf5d3
+	PDEPQ (BX), R14, R11                    // c4628bf51b
+	PDEPQ (R11), R14, R11                   // c4428bf51b
+	PDEPQ DX, R14, R11                      // c4628bf5da
+	PDEPQ R11, R14, R11                     // c4428bf5db
+	PEXTL (BX), R9, DX                      // c4e232f513
+	PEXTL (R11), R9, DX                     // c4c232f513
+	PEXTL DX, R9, DX                        // c4e232f5d2
+	PEXTL R11, R9, DX                       // c4c232f5d3
+	PEXTL (BX), R9, R11                     // c46232f51b
+	PEXTL (R11), R9, R11                    // c44232f51b
+	PEXTL DX, R9, R11                       // c46232f5da
+	PEXTL R11, R9, R11                      // c44232f5db
+	PEXTQ (BX), R14, DX                     // c4e28af513
+	PEXTQ (R11), R14, DX                    // c4c28af513
+	PEXTQ DX, R14, DX                       // c4e28af5d2
+	PEXTQ R11, R14, DX                      // c4c28af5d3
+	PEXTQ (BX), R14, R11                    // c4628af51b
+	PEXTQ (R11), R14, R11                   // c4428af51b
+	PEXTQ DX, R14, R11                      // c4628af5da
+	PEXTQ R11, R14, R11                     // c4428af5db
+	PEXTRB $7, X2, (BX)                     // 660f3a141307
+	PEXTRB $7, X11, (BX)                    // 66440f3a141b07
+	PEXTRB $7, X2, (R11)                    // 66410f3a141307
+	PEXTRB $7, X11, (R11)                   // 66450f3a141b07
+	PEXTRB $7, X2, DX                       // 660f3a14d207
+	PEXTRB $7, X11, DX                      // 66440f3a14da07
+	PEXTRB $7, X2, R11                      // 66410f3a14d307
+	PEXTRB $7, X11, R11                     // 66450f3a14db07
+	PEXTRD $7, X2, (BX)                     // 660f3a161307
+	PEXTRD $7, X11, (BX)                    // 66440f3a161b07
+	PEXTRD $7, X2, (R11)                    // 66410f3a161307
+	PEXTRD $7, X11, (R11)                   // 66450f3a161b07
+	PEXTRD $7, X2, DX                       // 660f3a16d207
+	PEXTRD $7, X11, DX                      // 66440f3a16da07
+	PEXTRD $7, X2, R11                      // 66410f3a16d307
+	PEXTRD $7, X11, R11                     // 66450f3a16db07
+	PEXTRQ $7, X2, (BX)                     // 66480f3a161307
+	PEXTRQ $7, X11, (BX)                    // 664c0f3a161b07
+	PEXTRQ $7, X2, (R11)                    // 66490f3a161307
+	PEXTRQ $7, X11, (R11)                   // 664d0f3a161b07
+	PEXTRQ $7, X2, DX                       // 66480f3a16d207
+	PEXTRQ $7, X11, DX                      // 664c0f3a16da07
+	PEXTRQ $7, X2, R11                      // 66490f3a16d307
+	PEXTRQ $7, X11, R11                     // 664d0f3a16db07
+	//TODO: PEXTRW $7, M2, DX               // 0fc5d207
+	//TODO: PEXTRW $7, M3, DX               // 0fc5d307
+	//TODO: PEXTRW $7, M2, R11              // 440fc5da07
+	//TODO: PEXTRW $7, M3, R11              // 440fc5db07
+	PEXTRW $7, X2, DX                       // 660fc5d207 or 660f3a15d207
+	PEXTRW $7, X11, DX                      // 66410fc5d307 or 66440f3a15da07
+	PEXTRW $7, X2, R11                      // 66440fc5da07 or 66410f3a15d307
+	PEXTRW $7, X11, R11                     // 66450fc5db07 or 66450f3a15db07
+	//TODO: PEXTRW $7, X2, (BX)             // 660f3a151307
+	//TODO: PEXTRW $7, X11, (BX)            // 66440f3a151b07
+	//TODO: PEXTRW $7, X2, (R11)            // 66410f3a151307
+	//TODO: PEXTRW $7, X11, (R11)           // 66450f3a151b07
+	PHADDD (BX), M2                         // 0f380213
+	PHADDD (R11), M2                        // 410f380213
+	PHADDD M2, M2                           // 0f3802d2
+	PHADDD M3, M2                           // 0f3802d3
+	PHADDD (BX), M3                         // 0f38021b
+	PHADDD (R11), M3                        // 410f38021b
+	PHADDD M2, M3                           // 0f3802da
+	PHADDD M3, M3                           // 0f3802db
+	PHADDD (BX), X2                         // 660f380213
+	PHADDD (R11), X2                        // 66410f380213
+	PHADDD X2, X2                           // 660f3802d2
+	PHADDD X11, X2                          // 66410f3802d3
+	PHADDD (BX), X11                        // 66440f38021b
+	PHADDD (R11), X11                       // 66450f38021b
+	PHADDD X2, X11                          // 66440f3802da
+	PHADDD X11, X11                         // 66450f3802db
+	//TODO: PHADDSW (BX), M2                // 0f380313
+	//TODO: PHADDSW (R11), M2               // 410f380313
+	//TODO: PHADDSW M2, M2                  // 0f3803d2
+	//TODO: PHADDSW M3, M2                  // 0f3803d3
+	//TODO: PHADDSW (BX), M3                // 0f38031b
+	//TODO: PHADDSW (R11), M3               // 410f38031b
+	//TODO: PHADDSW M2, M3                  // 0f3803da
+	//TODO: PHADDSW M3, M3                  // 0f3803db
+	//TODO: PHADDSW (BX), X2                // 660f380313
+	//TODO: PHADDSW (R11), X2               // 66410f380313
+	//TODO: PHADDSW X2, X2                  // 660f3803d2
+	//TODO: PHADDSW X11, X2                 // 66410f3803d3
+	//TODO: PHADDSW (BX), X11               // 66440f38031b
+	//TODO: PHADDSW (R11), X11              // 66450f38031b
+	//TODO: PHADDSW X2, X11                 // 66440f3803da
+	//TODO: PHADDSW X11, X11                // 66450f3803db
+	//TODO: PHADDW (BX), M2                 // 0f380113
+	//TODO: PHADDW (R11), M2                // 410f380113
+	//TODO: PHADDW M2, M2                   // 0f3801d2
+	//TODO: PHADDW M3, M2                   // 0f3801d3
+	//TODO: PHADDW (BX), M3                 // 0f38011b
+	//TODO: PHADDW (R11), M3                // 410f38011b
+	//TODO: PHADDW M2, M3                   // 0f3801da
+	//TODO: PHADDW M3, M3                   // 0f3801db
+	//TODO: PHADDW (BX), X2                 // 660f380113
+	//TODO: PHADDW (R11), X2                // 66410f380113
+	//TODO: PHADDW X2, X2                   // 660f3801d2
+	//TODO: PHADDW X11, X2                  // 66410f3801d3
+	//TODO: PHADDW (BX), X11                // 66440f38011b
+	//TODO: PHADDW (R11), X11               // 66450f38011b
+	//TODO: PHADDW X2, X11                  // 66440f3801da
+	//TODO: PHADDW X11, X11                 // 66450f3801db
+	//TODO: PHMINPOSUW (BX), X2             // 660f384113
+	//TODO: PHMINPOSUW (R11), X2            // 66410f384113
+	//TODO: PHMINPOSUW X2, X2               // 660f3841d2
+	//TODO: PHMINPOSUW X11, X2              // 66410f3841d3
+	//TODO: PHMINPOSUW (BX), X11            // 66440f38411b
+	//TODO: PHMINPOSUW (R11), X11           // 66450f38411b
+	//TODO: PHMINPOSUW X2, X11              // 66440f3841da
+	//TODO: PHMINPOSUW X11, X11             // 66450f3841db
+	//TODO: PHSUBD (BX), M2                 // 0f380613
+	//TODO: PHSUBD (R11), M2                // 410f380613
+	//TODO: PHSUBD M2, M2                   // 0f3806d2
+	//TODO: PHSUBD M3, M2                   // 0f3806d3
+	//TODO: PHSUBD (BX), M3                 // 0f38061b
+	//TODO: PHSUBD (R11), M3                // 410f38061b
+	//TODO: PHSUBD M2, M3                   // 0f3806da
+	//TODO: PHSUBD M3, M3                   // 0f3806db
+	//TODO: PHSUBD (BX), X2                 // 660f380613
+	//TODO: PHSUBD (R11), X2                // 66410f380613
+	//TODO: PHSUBD X2, X2                   // 660f3806d2
+	//TODO: PHSUBD X11, X2                  // 66410f3806d3
+	//TODO: PHSUBD (BX), X11                // 66440f38061b
+	//TODO: PHSUBD (R11), X11               // 66450f38061b
+	//TODO: PHSUBD X2, X11                  // 66440f3806da
+	//TODO: PHSUBD X11, X11                 // 66450f3806db
+	//TODO: PHSUBSW (BX), M2                // 0f380713
+	//TODO: PHSUBSW (R11), M2               // 410f380713
+	//TODO: PHSUBSW M2, M2                  // 0f3807d2
+	//TODO: PHSUBSW M3, M2                  // 0f3807d3
+	//TODO: PHSUBSW (BX), M3                // 0f38071b
+	//TODO: PHSUBSW (R11), M3               // 410f38071b
+	//TODO: PHSUBSW M2, M3                  // 0f3807da
+	//TODO: PHSUBSW M3, M3                  // 0f3807db
+	//TODO: PHSUBSW (BX), X2                // 660f380713
+	//TODO: PHSUBSW (R11), X2               // 66410f380713
+	//TODO: PHSUBSW X2, X2                  // 660f3807d2
+	//TODO: PHSUBSW X11, X2                 // 66410f3807d3
+	//TODO: PHSUBSW (BX), X11               // 66440f38071b
+	//TODO: PHSUBSW (R11), X11              // 66450f38071b
+	//TODO: PHSUBSW X2, X11                 // 66440f3807da
+	//TODO: PHSUBSW X11, X11                // 66450f3807db
+	//TODO: PHSUBW (BX), M2                 // 0f380513
+	//TODO: PHSUBW (R11), M2                // 410f380513
+	//TODO: PHSUBW M2, M2                   // 0f3805d2
+	//TODO: PHSUBW M3, M2                   // 0f3805d3
+	//TODO: PHSUBW (BX), M3                 // 0f38051b
+	//TODO: PHSUBW (R11), M3                // 410f38051b
+	//TODO: PHSUBW M2, M3                   // 0f3805da
+	//TODO: PHSUBW M3, M3                   // 0f3805db
+	//TODO: PHSUBW (BX), X2                 // 660f380513
+	//TODO: PHSUBW (R11), X2                // 66410f380513
+	//TODO: PHSUBW X2, X2                   // 660f3805d2
+	//TODO: PHSUBW X11, X2                  // 66410f3805d3
+	//TODO: PHSUBW (BX), X11                // 66440f38051b
+	//TODO: PHSUBW (R11), X11               // 66450f38051b
+	//TODO: PHSUBW X2, X11                  // 66440f3805da
+	//TODO: PHSUBW X11, X11                 // 66450f3805db
+	PINSRB $7, (BX), X2                     // 660f3a201307
+	PINSRB $7, (R11), X2                    // 66410f3a201307
+	PINSRB $7, DX, X2                       // 660f3a20d207
+	PINSRB $7, R11, X2                      // 66410f3a20d307
+	PINSRB $7, (BX), X11                    // 66440f3a201b07
+	PINSRB $7, (R11), X11                   // 66450f3a201b07
+	PINSRB $7, DX, X11                      // 66440f3a20da07
+	PINSRB $7, R11, X11                     // 66450f3a20db07
+	PINSRD $7, (BX), X2                     // 660f3a221307
+	PINSRD $7, (R11), X2                    // 66410f3a221307
+	PINSRD $7, DX, X2                       // 660f3a22d207
+	PINSRD $7, R11, X2                      // 66410f3a22d307
+	PINSRD $7, (BX), X11                    // 66440f3a221b07
+	PINSRD $7, (R11), X11                   // 66450f3a221b07
+	PINSRD $7, DX, X11                      // 66440f3a22da07
+	PINSRD $7, R11, X11                     // 66450f3a22db07
+	PINSRQ $7, (BX), X2                     // 66480f3a221307
+	PINSRQ $7, (R11), X2                    // 66490f3a221307
+	PINSRQ $7, DX, X2                       // 66480f3a22d207
+	PINSRQ $7, R11, X2                      // 66490f3a22d307
+	PINSRQ $7, (BX), X11                    // 664c0f3a221b07
+	PINSRQ $7, (R11), X11                   // 664d0f3a221b07
+	PINSRQ $7, DX, X11                      // 664c0f3a22da07
+	PINSRQ $7, R11, X11                     // 664d0f3a22db07
+	//TODO: PINSRW $7, (BX), M2             // 0fc41307
+	//TODO: PINSRW $7, (R11), M2            // 410fc41307
+	//TODO: PINSRW $7, DX, M2               // 0fc4d207
+	//TODO: PINSRW $7, R11, M2              // 410fc4d307
+	//TODO: PINSRW $7, (BX), M3             // 0fc41b07
+	//TODO: PINSRW $7, (R11), M3            // 410fc41b07
+	//TODO: PINSRW $7, DX, M3               // 0fc4da07
+	//TODO: PINSRW $7, R11, M3              // 410fc4db07
+	PINSRW $7, (BX), X2                     // 660fc41307
+	PINSRW $7, (R11), X2                    // 66410fc41307
+	PINSRW $7, DX, X2                       // 660fc4d207
+	PINSRW $7, R11, X2                      // 66410fc4d307
+	PINSRW $7, (BX), X11                    // 66440fc41b07
+	PINSRW $7, (R11), X11                   // 66450fc41b07
+	PINSRW $7, DX, X11                      // 66440fc4da07
+	PINSRW $7, R11, X11                     // 66450fc4db07
+	//TODO: PMADDUBSW (BX), M2              // 0f380413
+	//TODO: PMADDUBSW (R11), M2             // 410f380413
+	//TODO: PMADDUBSW M2, M2                // 0f3804d2
+	//TODO: PMADDUBSW M3, M2                // 0f3804d3
+	//TODO: PMADDUBSW (BX), M3              // 0f38041b
+	//TODO: PMADDUBSW (R11), M3             // 410f38041b
+	//TODO: PMADDUBSW M2, M3                // 0f3804da
+	//TODO: PMADDUBSW M3, M3                // 0f3804db
+	//TODO: PMADDUBSW (BX), X2              // 660f380413
+	//TODO: PMADDUBSW (R11), X2             // 66410f380413
+	//TODO: PMADDUBSW X2, X2                // 660f3804d2
+	//TODO: PMADDUBSW X11, X2               // 66410f3804d3
+	//TODO: PMADDUBSW (BX), X11             // 66440f38041b
+	//TODO: PMADDUBSW (R11), X11            // 66450f38041b
+	//TODO: PMADDUBSW X2, X11               // 66440f3804da
+	//TODO: PMADDUBSW X11, X11              // 66450f3804db
+	PMADDWL (BX), M2                        // 0ff513
+	PMADDWL (R11), M2                       // 410ff513
+	PMADDWL M2, M2                          // 0ff5d2
+	PMADDWL M3, M2                          // 0ff5d3
+	PMADDWL (BX), M3                        // 0ff51b
+	PMADDWL (R11), M3                       // 410ff51b
+	PMADDWL M2, M3                          // 0ff5da
+	PMADDWL M3, M3                          // 0ff5db
+	PMADDWL (BX), X2                        // 660ff513
+	PMADDWL (R11), X2                       // 66410ff513
+	PMADDWL X2, X2                          // 660ff5d2
+	PMADDWL X11, X2                         // 66410ff5d3
+	PMADDWL (BX), X11                       // 66440ff51b
+	PMADDWL (R11), X11                      // 66450ff51b
+	PMADDWL X2, X11                         // 66440ff5da
+	PMADDWL X11, X11                        // 66450ff5db
+	//TODO: PMAXSB (BX), X2                 // 660f383c13
+	//TODO: PMAXSB (R11), X2                // 66410f383c13
+	//TODO: PMAXSB X2, X2                   // 660f383cd2
+	//TODO: PMAXSB X11, X2                  // 66410f383cd3
+	//TODO: PMAXSB (BX), X11                // 66440f383c1b
+	//TODO: PMAXSB (R11), X11               // 66450f383c1b
+	//TODO: PMAXSB X2, X11                  // 66440f383cda
+	//TODO: PMAXSB X11, X11                 // 66450f383cdb
+	//TODO: PMAXSD (BX), X2                 // 660f383d13
+	//TODO: PMAXSD (R11), X2                // 66410f383d13
+	//TODO: PMAXSD X2, X2                   // 660f383dd2
+	//TODO: PMAXSD X11, X2                  // 66410f383dd3
+	//TODO: PMAXSD (BX), X11                // 66440f383d1b
+	//TODO: PMAXSD (R11), X11               // 66450f383d1b
+	//TODO: PMAXSD X2, X11                  // 66440f383dda
+	//TODO: PMAXSD X11, X11                 // 66450f383ddb
+	//TODO: PMAXSW (BX), M2                 // 0fee13
+	//TODO: PMAXSW (R11), M2                // 410fee13
+	//TODO: PMAXSW M2, M2                   // 0feed2
+	//TODO: PMAXSW M3, M2                   // 0feed3
+	//TODO: PMAXSW (BX), M3                 // 0fee1b
+	//TODO: PMAXSW (R11), M3                // 410fee1b
+	//TODO: PMAXSW M2, M3                   // 0feeda
+	//TODO: PMAXSW M3, M3                   // 0feedb
+	PMAXSW (BX), X2                         // 660fee13
+	PMAXSW (R11), X2                        // 66410fee13
+	PMAXSW X2, X2                           // 660feed2
+	PMAXSW X11, X2                          // 66410feed3
+	PMAXSW (BX), X11                        // 66440fee1b
+	PMAXSW (R11), X11                       // 66450fee1b
+	PMAXSW X2, X11                          // 66440feeda
+	PMAXSW X11, X11                         // 66450feedb
+	//TODO: PMAXUB (BX), M2                 // 0fde13
+	//TODO: PMAXUB (R11), M2                // 410fde13
+	//TODO: PMAXUB M2, M2                   // 0fded2
+	//TODO: PMAXUB M3, M2                   // 0fded3
+	//TODO: PMAXUB (BX), M3                 // 0fde1b
+	//TODO: PMAXUB (R11), M3                // 410fde1b
+	//TODO: PMAXUB M2, M3                   // 0fdeda
+	//TODO: PMAXUB M3, M3                   // 0fdedb
+	PMAXUB (BX), X2                         // 660fde13
+	PMAXUB (R11), X2                        // 66410fde13
+	PMAXUB X2, X2                           // 660fded2
+	PMAXUB X11, X2                          // 66410fded3
+	PMAXUB (BX), X11                        // 66440fde1b
+	PMAXUB (R11), X11                       // 66450fde1b
+	PMAXUB X2, X11                          // 66440fdeda
+	PMAXUB X11, X11                         // 66450fdedb
+	//TODO: PMAXUD (BX), X2                 // 660f383f13
+	//TODO: PMAXUD (R11), X2                // 66410f383f13
+	//TODO: PMAXUD X2, X2                   // 660f383fd2
+	//TODO: PMAXUD X11, X2                  // 66410f383fd3
+	//TODO: PMAXUD (BX), X11                // 66440f383f1b
+	//TODO: PMAXUD (R11), X11               // 66450f383f1b
+	//TODO: PMAXUD X2, X11                  // 66440f383fda
+	//TODO: PMAXUD X11, X11                 // 66450f383fdb
+	//TODO: PMAXUW (BX), X2                 // 660f383e13
+	//TODO: PMAXUW (R11), X2                // 66410f383e13
+	//TODO: PMAXUW X2, X2                   // 660f383ed2
+	//TODO: PMAXUW X11, X2                  // 66410f383ed3
+	//TODO: PMAXUW (BX), X11                // 66440f383e1b
+	//TODO: PMAXUW (R11), X11               // 66450f383e1b
+	//TODO: PMAXUW X2, X11                  // 66440f383eda
+	//TODO: PMAXUW X11, X11                 // 66450f383edb
+	//TODO: PMINSB (BX), X2                 // 660f383813
+	//TODO: PMINSB (R11), X2                // 66410f383813
+	//TODO: PMINSB X2, X2                   // 660f3838d2
+	//TODO: PMINSB X11, X2                  // 66410f3838d3
+	//TODO: PMINSB (BX), X11                // 66440f38381b
+	//TODO: PMINSB (R11), X11               // 66450f38381b
+	//TODO: PMINSB X2, X11                  // 66440f3838da
+	//TODO: PMINSB X11, X11                 // 66450f3838db
+	//TODO: PMINSD (BX), X2                 // 660f383913
+	//TODO: PMINSD (R11), X2                // 66410f383913
+	//TODO: PMINSD X2, X2                   // 660f3839d2
+	//TODO: PMINSD X11, X2                  // 66410f3839d3
+	//TODO: PMINSD (BX), X11                // 66440f38391b
+	//TODO: PMINSD (R11), X11               // 66450f38391b
+	//TODO: PMINSD X2, X11                  // 66440f3839da
+	//TODO: PMINSD X11, X11                 // 66450f3839db
+	//TODO: PMINSW (BX), M2                 // 0fea13
+	//TODO: PMINSW (R11), M2                // 410fea13
+	//TODO: PMINSW M2, M2                   // 0fead2
+	//TODO: PMINSW M3, M2                   // 0fead3
+	//TODO: PMINSW (BX), M3                 // 0fea1b
+	//TODO: PMINSW (R11), M3                // 410fea1b
+	//TODO: PMINSW M2, M3                   // 0feada
+	//TODO: PMINSW M3, M3                   // 0feadb
+	PMINSW (BX), X2                         // 660fea13
+	PMINSW (R11), X2                        // 66410fea13
+	PMINSW X2, X2                           // 660fead2
+	PMINSW X11, X2                          // 66410fead3
+	PMINSW (BX), X11                        // 66440fea1b
+	PMINSW (R11), X11                       // 66450fea1b
+	PMINSW X2, X11                          // 66440feada
+	PMINSW X11, X11                         // 66450feadb
+	//TODO: PMINUB (BX), M2                 // 0fda13
+	//TODO: PMINUB (R11), M2                // 410fda13
+	//TODO: PMINUB M2, M2                   // 0fdad2
+	//TODO: PMINUB M3, M2                   // 0fdad3
+	//TODO: PMINUB (BX), M3                 // 0fda1b
+	//TODO: PMINUB (R11), M3                // 410fda1b
+	//TODO: PMINUB M2, M3                   // 0fdada
+	//TODO: PMINUB M3, M3                   // 0fdadb
+	PMINUB (BX), X2                         // 660fda13
+	PMINUB (R11), X2                        // 66410fda13
+	PMINUB X2, X2                           // 660fdad2
+	PMINUB X11, X2                          // 66410fdad3
+	PMINUB (BX), X11                        // 66440fda1b
+	PMINUB (R11), X11                       // 66450fda1b
+	PMINUB X2, X11                          // 66440fdada
+	PMINUB X11, X11                         // 66450fdadb
+	//TODO: PMINUD (BX), X2                 // 660f383b13
+	//TODO: PMINUD (R11), X2                // 66410f383b13
+	//TODO: PMINUD X2, X2                   // 660f383bd2
+	//TODO: PMINUD X11, X2                  // 66410f383bd3
+	//TODO: PMINUD (BX), X11                // 66440f383b1b
+	//TODO: PMINUD (R11), X11               // 66450f383b1b
+	//TODO: PMINUD X2, X11                  // 66440f383bda
+	//TODO: PMINUD X11, X11                 // 66450f383bdb
+	//TODO: PMINUW (BX), X2                 // 660f383a13
+	//TODO: PMINUW (R11), X2                // 66410f383a13
+	//TODO: PMINUW X2, X2                   // 660f383ad2
+	//TODO: PMINUW X11, X2                  // 66410f383ad3
+	//TODO: PMINUW (BX), X11                // 66440f383a1b
+	//TODO: PMINUW (R11), X11               // 66450f383a1b
+	//TODO: PMINUW X2, X11                  // 66440f383ada
+	//TODO: PMINUW X11, X11                 // 66450f383adb
+	PMOVMSKB M2, DX                         // 0fd7d2
+	PMOVMSKB M3, DX                         // 0fd7d3
+	PMOVMSKB M2, R11                        // 440fd7da
+	PMOVMSKB M3, R11                        // 440fd7db
+	PMOVMSKB X2, DX                         // 660fd7d2
+	PMOVMSKB X11, DX                        // 66410fd7d3
+	PMOVMSKB X2, R11                        // 66440fd7da
+	PMOVMSKB X11, R11                       // 66450fd7db
+	PMOVSXBD (BX), X2                       // 660f382113
+	PMOVSXBD (R11), X2                      // 66410f382113
+	PMOVSXBD X2, X2                         // 660f3821d2
+	PMOVSXBD X11, X2                        // 66410f3821d3
+	PMOVSXBD (BX), X11                      // 66440f38211b
+	PMOVSXBD (R11), X11                     // 66450f38211b
+	PMOVSXBD X2, X11                        // 66440f3821da
+	PMOVSXBD X11, X11                       // 66450f3821db
+	PMOVSXBQ (BX), X2                       // 660f382213
+	PMOVSXBQ (R11), X2                      // 66410f382213
+	PMOVSXBQ X2, X2                         // 660f3822d2
+	PMOVSXBQ X11, X2                        // 66410f3822d3
+	PMOVSXBQ (BX), X11                      // 66440f38221b
+	PMOVSXBQ (R11), X11                     // 66450f38221b
+	PMOVSXBQ X2, X11                        // 66440f3822da
+	PMOVSXBQ X11, X11                       // 66450f3822db
+	PMOVSXBW (BX), X2                       // 660f382013
+	PMOVSXBW (R11), X2                      // 66410f382013
+	PMOVSXBW X2, X2                         // 660f3820d2
+	PMOVSXBW X11, X2                        // 66410f3820d3
+	PMOVSXBW (BX), X11                      // 66440f38201b
+	PMOVSXBW (R11), X11                     // 66450f38201b
+	PMOVSXBW X2, X11                        // 66440f3820da
+	PMOVSXBW X11, X11                       // 66450f3820db
+	PMOVSXDQ (BX), X2                       // 660f382513
+	PMOVSXDQ (R11), X2                      // 66410f382513
+	PMOVSXDQ X2, X2                         // 660f3825d2
+	PMOVSXDQ X11, X2                        // 66410f3825d3
+	PMOVSXDQ (BX), X11                      // 66440f38251b
+	PMOVSXDQ (R11), X11                     // 66450f38251b
+	PMOVSXDQ X2, X11                        // 66440f3825da
+	PMOVSXDQ X11, X11                       // 66450f3825db
+	PMOVSXWD (BX), X2                       // 660f382313
+	PMOVSXWD (R11), X2                      // 66410f382313
+	PMOVSXWD X2, X2                         // 660f3823d2
+	PMOVSXWD X11, X2                        // 66410f3823d3
+	PMOVSXWD (BX), X11                      // 66440f38231b
+	PMOVSXWD (R11), X11                     // 66450f38231b
+	PMOVSXWD X2, X11                        // 66440f3823da
+	PMOVSXWD X11, X11                       // 66450f3823db
+	PMOVSXWQ (BX), X2                       // 660f382413
+	PMOVSXWQ (R11), X2                      // 66410f382413
+	PMOVSXWQ X2, X2                         // 660f3824d2
+	PMOVSXWQ X11, X2                        // 66410f3824d3
+	PMOVSXWQ (BX), X11                      // 66440f38241b
+	PMOVSXWQ (R11), X11                     // 66450f38241b
+	PMOVSXWQ X2, X11                        // 66440f3824da
+	PMOVSXWQ X11, X11                       // 66450f3824db
+	PMOVZXBD (BX), X2                       // 660f383113
+	PMOVZXBD (R11), X2                      // 66410f383113
+	PMOVZXBD X2, X2                         // 660f3831d2
+	PMOVZXBD X11, X2                        // 66410f3831d3
+	PMOVZXBD (BX), X11                      // 66440f38311b
+	PMOVZXBD (R11), X11                     // 66450f38311b
+	PMOVZXBD X2, X11                        // 66440f3831da
+	PMOVZXBD X11, X11                       // 66450f3831db
+	PMOVZXBQ (BX), X2                       // 660f383213
+	PMOVZXBQ (R11), X2                      // 66410f383213
+	PMOVZXBQ X2, X2                         // 660f3832d2
+	PMOVZXBQ X11, X2                        // 66410f3832d3
+	PMOVZXBQ (BX), X11                      // 66440f38321b
+	PMOVZXBQ (R11), X11                     // 66450f38321b
+	PMOVZXBQ X2, X11                        // 66440f3832da
+	PMOVZXBQ X11, X11                       // 66450f3832db
+	PMOVZXBW (BX), X2                       // 660f383013
+	PMOVZXBW (R11), X2                      // 66410f383013
+	PMOVZXBW X2, X2                         // 660f3830d2
+	PMOVZXBW X11, X2                        // 66410f3830d3
+	PMOVZXBW (BX), X11                      // 66440f38301b
+	PMOVZXBW (R11), X11                     // 66450f38301b
+	PMOVZXBW X2, X11                        // 66440f3830da
+	PMOVZXBW X11, X11                       // 66450f3830db
+	PMOVZXDQ (BX), X2                       // 660f383513
+	PMOVZXDQ (R11), X2                      // 66410f383513
+	PMOVZXDQ X2, X2                         // 660f3835d2
+	PMOVZXDQ X11, X2                        // 66410f3835d3
+	PMOVZXDQ (BX), X11                      // 66440f38351b
+	PMOVZXDQ (R11), X11                     // 66450f38351b
+	PMOVZXDQ X2, X11                        // 66440f3835da
+	PMOVZXDQ X11, X11                       // 66450f3835db
+	PMOVZXWD (BX), X2                       // 660f383313
+	PMOVZXWD (R11), X2                      // 66410f383313
+	PMOVZXWD X2, X2                         // 660f3833d2
+	PMOVZXWD X11, X2                        // 66410f3833d3
+	PMOVZXWD (BX), X11                      // 66440f38331b
+	PMOVZXWD (R11), X11                     // 66450f38331b
+	PMOVZXWD X2, X11                        // 66440f3833da
+	PMOVZXWD X11, X11                       // 66450f3833db
+	PMOVZXWQ (BX), X2                       // 660f383413
+	PMOVZXWQ (R11), X2                      // 66410f383413
+	PMOVZXWQ X2, X2                         // 660f3834d2
+	PMOVZXWQ X11, X2                        // 66410f3834d3
+	PMOVZXWQ (BX), X11                      // 66440f38341b
+	PMOVZXWQ (R11), X11                     // 66450f38341b
+	PMOVZXWQ X2, X11                        // 66440f3834da
+	PMOVZXWQ X11, X11                       // 66450f3834db
+	PMULDQ (BX), X2                         // 660f382813
+	PMULDQ (R11), X2                        // 66410f382813
+	PMULDQ X2, X2                           // 660f3828d2
+	PMULDQ X11, X2                          // 66410f3828d3
+	PMULDQ (BX), X11                        // 66440f38281b
+	PMULDQ (R11), X11                       // 66450f38281b
+	PMULDQ X2, X11                          // 66440f3828da
+	PMULDQ X11, X11                         // 66450f3828db
+	//TODO: PMULHRSW (BX), M2               // 0f380b13
+	//TODO: PMULHRSW (R11), M2              // 410f380b13
+	//TODO: PMULHRSW M2, M2                 // 0f380bd2
+	//TODO: PMULHRSW M3, M2                 // 0f380bd3
+	//TODO: PMULHRSW (BX), M3               // 0f380b1b
+	//TODO: PMULHRSW (R11), M3              // 410f380b1b
+	//TODO: PMULHRSW M2, M3                 // 0f380bda
+	//TODO: PMULHRSW M3, M3                 // 0f380bdb
+	//TODO: PMULHRSW (BX), X2               // 660f380b13
+	//TODO: PMULHRSW (R11), X2              // 66410f380b13
+	//TODO: PMULHRSW X2, X2                 // 660f380bd2
+	//TODO: PMULHRSW X11, X2                // 66410f380bd3
+	//TODO: PMULHRSW (BX), X11              // 66440f380b1b
+	//TODO: PMULHRSW (R11), X11             // 66450f380b1b
+	//TODO: PMULHRSW X2, X11                // 66440f380bda
+	//TODO: PMULHRSW X11, X11               // 66450f380bdb
+	PMULHUW (BX), M2                        // 0fe413
+	PMULHUW (R11), M2                       // 410fe413
+	PMULHUW M2, M2                          // 0fe4d2
+	PMULHUW M3, M2                          // 0fe4d3
+	PMULHUW (BX), M3                        // 0fe41b
+	PMULHUW (R11), M3                       // 410fe41b
+	PMULHUW M2, M3                          // 0fe4da
+	PMULHUW M3, M3                          // 0fe4db
+	PMULHUW (BX), X2                        // 660fe413
+	PMULHUW (R11), X2                       // 66410fe413
+	PMULHUW X2, X2                          // 660fe4d2
+	PMULHUW X11, X2                         // 66410fe4d3
+	PMULHUW (BX), X11                       // 66440fe41b
+	PMULHUW (R11), X11                      // 66450fe41b
+	PMULHUW X2, X11                         // 66440fe4da
+	PMULHUW X11, X11                        // 66450fe4db
+	PMULHW (BX), M2                         // 0fe513
+	PMULHW (R11), M2                        // 410fe513
+	PMULHW M2, M2                           // 0fe5d2
+	PMULHW M3, M2                           // 0fe5d3
+	PMULHW (BX), M3                         // 0fe51b
+	PMULHW (R11), M3                        // 410fe51b
+	PMULHW M2, M3                           // 0fe5da
+	PMULHW M3, M3                           // 0fe5db
+	PMULHW (BX), X2                         // 660fe513
+	PMULHW (R11), X2                        // 66410fe513
+	PMULHW X2, X2                           // 660fe5d2
+	PMULHW X11, X2                          // 66410fe5d3
+	PMULHW (BX), X11                        // 66440fe51b
+	PMULHW (R11), X11                       // 66450fe51b
+	PMULHW X2, X11                          // 66440fe5da
+	PMULHW X11, X11                         // 66450fe5db
+	PMULLD (BX), X2                         // 660f384013
+	PMULLD (R11), X2                        // 66410f384013
+	PMULLD X2, X2                           // 660f3840d2
+	PMULLD X11, X2                          // 66410f3840d3
+	PMULLD (BX), X11                        // 66440f38401b
+	PMULLD (R11), X11                       // 66450f38401b
+	PMULLD X2, X11                          // 66440f3840da
+	PMULLD X11, X11                         // 66450f3840db
+	PMULLW (BX), M2                         // 0fd513
+	PMULLW (R11), M2                        // 410fd513
+	PMULLW M2, M2                           // 0fd5d2
+	PMULLW M3, M2                           // 0fd5d3
+	PMULLW (BX), M3                         // 0fd51b
+	PMULLW (R11), M3                        // 410fd51b
+	PMULLW M2, M3                           // 0fd5da
+	PMULLW M3, M3                           // 0fd5db
+	PMULLW (BX), X2                         // 660fd513
+	PMULLW (R11), X2                        // 66410fd513
+	PMULLW X2, X2                           // 660fd5d2
+	PMULLW X11, X2                          // 66410fd5d3
+	PMULLW (BX), X11                        // 66440fd51b
+	PMULLW (R11), X11                       // 66450fd51b
+	PMULLW X2, X11                          // 66440fd5da
+	PMULLW X11, X11                         // 66450fd5db
+	PMULULQ (BX), M2                        // 0ff413
+	PMULULQ (R11), M2                       // 410ff413
+	PMULULQ M2, M2                          // 0ff4d2
+	PMULULQ M3, M2                          // 0ff4d3
+	PMULULQ (BX), M3                        // 0ff41b
+	PMULULQ (R11), M3                       // 410ff41b
+	PMULULQ M2, M3                          // 0ff4da
+	PMULULQ M3, M3                          // 0ff4db
+	PMULULQ (BX), X2                        // 660ff413
+	PMULULQ (R11), X2                       // 66410ff413
+	PMULULQ X2, X2                          // 660ff4d2
+	PMULULQ X11, X2                         // 66410ff4d3
+	PMULULQ (BX), X11                       // 66440ff41b
+	PMULULQ (R11), X11                      // 66450ff41b
+	PMULULQ X2, X11                         // 66440ff4da
+	PMULULQ X11, X11                        // 66450ff4db
+	PUSHQ AX
+	POPQ FS                                 // 660fa1 or 0fa1
+	PUSHQ AX
+	POPQ GS                                 // 660fa9 or 0fa9
+	PUSHW AX
+	POPW (BX)                               // 668f03
+	PUSHW AX
+	POPW (R11)                              // 66418f03
+	PUSHW AX
+	POPW DX                                 // 668fc2 or 665a
+	PUSHW AX
+	POPW R11                                // 66418fc3 or 66415b
+	PUSHQ AX
+	POPQ (BX)                               // 8f03
+	PUSHQ AX
+	POPQ (R11)                              // 418f03
+	PUSHQ AX
+	POPQ DX                                 // 8fc2 or 5a
+	PUSHQ AX
+	POPQ R11                                // 418fc3 or 415b
+	POPCNTW (BX), DX                        // 66f30fb813
+	POPCNTW (R11), DX                       // 66f3410fb813
+	POPCNTW DX, DX                          // 66f30fb8d2
+	POPCNTW R11, DX                         // 66f3410fb8d3
+	POPCNTW (BX), R11                       // 66f3440fb81b
+	POPCNTW (R11), R11                      // 66f3450fb81b
+	POPCNTW DX, R11                         // 66f3440fb8da
+	POPCNTW R11, R11                        // 66f3450fb8db
+	POPCNTL (BX), DX                        // f30fb813
+	POPCNTL (R11), DX                       // f3410fb813
+	POPCNTL DX, DX                          // f30fb8d2
+	POPCNTL R11, DX                         // f3410fb8d3
+	POPCNTL (BX), R11                       // f3440fb81b
+	POPCNTL (R11), R11                      // f3450fb81b
+	POPCNTL DX, R11                         // f3440fb8da
+	POPCNTL R11, R11                        // f3450fb8db
+	POPCNTQ (BX), DX                        // f3480fb813
+	POPCNTQ (R11), DX                       // f3490fb813
+	POPCNTQ DX, DX                          // f3480fb8d2
+	POPCNTQ R11, DX                         // f3490fb8d3
+	POPCNTQ (BX), R11                       // f34c0fb81b
+	POPCNTQ (R11), R11                      // f34d0fb81b
+	POPCNTQ DX, R11                         // f34c0fb8da
+	POPCNTQ R11, R11                        // f34d0fb8db
+	PUSHFW
+	POPFW                                   // 669d
+	PUSHFQ
+	POPFQ                                   // 9d
+	POR (BX), M2                            // 0feb13
+	POR (R11), M2                           // 410feb13
+	POR M2, M2                              // 0febd2
+	POR M3, M2                              // 0febd3
+	POR (BX), M3                            // 0feb1b
+	POR (R11), M3                           // 410feb1b
+	POR M2, M3                              // 0febda
+	POR M3, M3                              // 0febdb
+	POR (BX), X2                            // 660feb13
+	POR (R11), X2                           // 66410feb13
+	POR X2, X2                              // 660febd2
+	POR X11, X2                             // 66410febd3
+	POR (BX), X11                           // 66440feb1b
+	POR (R11), X11                          // 66450feb1b
+	POR X2, X11                             // 66440febda
+	POR X11, X11                            // 66450febdb
+	PREFETCHNTA (BX)                        // 0f1803
+	PREFETCHNTA (R11)                       // 410f1803
+	PREFETCHT0 (BX)                         // 0f180b
+	PREFETCHT0 (R11)                        // 410f180b
+	PREFETCHT1 (BX)                         // 0f1813
+	PREFETCHT1 (R11)                        // 410f1813
+	PREFETCHT2 (BX)                         // 0f181b
+	PREFETCHT2 (R11)                        // 410f181b
+	//TODO: PREFETCHW (BX)                  // 0f0d0b
+	//TODO: PREFETCHW (R11)                 // 410f0d0b
+	//TODO: PREFETCHWT1 (BX)                // 0f0d13
+	//TODO: PREFETCHWT1 (R11)               // 410f0d13
+	//TODO: PSADBW (BX), M2                 // 0ff613
+	//TODO: PSADBW (R11), M2                // 410ff613
+	//TODO: PSADBW M2, M2                   // 0ff6d2
+	//TODO: PSADBW M3, M2                   // 0ff6d3
+	//TODO: PSADBW (BX), M3                 // 0ff61b
+	//TODO: PSADBW (R11), M3                // 410ff61b
+	//TODO: PSADBW M2, M3                   // 0ff6da
+	//TODO: PSADBW M3, M3                   // 0ff6db
+	PSADBW (BX), X2                         // 660ff613
+	PSADBW (R11), X2                        // 66410ff613
+	PSADBW X2, X2                           // 660ff6d2
+	PSADBW X11, X2                          // 66410ff6d3
+	PSADBW (BX), X11                        // 66440ff61b
+	PSADBW (R11), X11                       // 66450ff61b
+	PSADBW X2, X11                          // 66440ff6da
+	PSADBW X11, X11                         // 66450ff6db
+	//TODO: PSHUFB (BX), M2                 // 0f380013
+	//TODO: PSHUFB (R11), M2                // 410f380013
+	//TODO: PSHUFB M2, M2                   // 0f3800d2
+	//TODO: PSHUFB M3, M2                   // 0f3800d3
+	//TODO: PSHUFB (BX), M3                 // 0f38001b
+	//TODO: PSHUFB (R11), M3                // 410f38001b
+	//TODO: PSHUFB M2, M3                   // 0f3800da
+	//TODO: PSHUFB M3, M3                   // 0f3800db
+	PSHUFB (BX), X2                         // 660f380013
+	PSHUFB (R11), X2                        // 66410f380013
+	PSHUFB X2, X2                           // 660f3800d2
+	PSHUFB X11, X2                          // 66410f3800d3
+	PSHUFB (BX), X11                        // 66440f38001b
+	PSHUFB (R11), X11                       // 66450f38001b
+	PSHUFB X2, X11                          // 66440f3800da
+	PSHUFB X11, X11                         // 66450f3800db
+	PSHUFD $7, (BX), X2                     // 660f701307
+	PSHUFL $7, (BX), X2                     // 660f701307
+	PSHUFD $7, (R11), X2                    // 66410f701307
+	PSHUFL $7, (R11), X2                    // 66410f701307
+	PSHUFD $7, X2, X2                       // 660f70d207
+	PSHUFL $7, X2, X2                       // 660f70d207
+	PSHUFD $7, X11, X2                      // 66410f70d307
+	PSHUFL $7, X11, X2                      // 66410f70d307
+	PSHUFD $7, (BX), X11                    // 66440f701b07
+	PSHUFL $7, (BX), X11                    // 66440f701b07
+	PSHUFD $7, (R11), X11                   // 66450f701b07
+	PSHUFL $7, (R11), X11                   // 66450f701b07
+	PSHUFD $7, X2, X11                      // 66440f70da07
+	PSHUFL $7, X2, X11                      // 66440f70da07
+	PSHUFD $7, X11, X11                     // 66450f70db07
+	PSHUFL $7, X11, X11                     // 66450f70db07
+	PSHUFHW $7, (BX), X2                    // f30f701307
+	PSHUFHW $7, (R11), X2                   // f3410f701307
+	PSHUFHW $7, X2, X2                      // f30f70d207
+	PSHUFHW $7, X11, X2                     // f3410f70d307
+	PSHUFHW $7, (BX), X11                   // f3440f701b07
+	PSHUFHW $7, (R11), X11                  // f3450f701b07
+	PSHUFHW $7, X2, X11                     // f3440f70da07
+	PSHUFHW $7, X11, X11                    // f3450f70db07
+	PSHUFLW $7, (BX), X2                    // f20f701307
+	PSHUFLW $7, (R11), X2                   // f2410f701307
+	PSHUFLW $7, X2, X2                      // f20f70d207
+	PSHUFLW $7, X11, X2                     // f2410f70d307
+	PSHUFLW $7, (BX), X11                   // f2440f701b07
+	PSHUFLW $7, (R11), X11                  // f2450f701b07
+	PSHUFLW $7, X2, X11                     // f2440f70da07
+	PSHUFLW $7, X11, X11                    // f2450f70db07
+	PSHUFW $7, (BX), M2                     // 0f701307
+	PSHUFW $7, (R11), M2                    // 410f701307
+	PSHUFW $7, M2, M2                       // 0f70d207
+	PSHUFW $7, M3, M2                       // 0f70d307
+	PSHUFW $7, (BX), M3                     // 0f701b07
+	PSHUFW $7, (R11), M3                    // 410f701b07
+	PSHUFW $7, M2, M3                       // 0f70da07
+	PSHUFW $7, M3, M3                       // 0f70db07
+	//TODO: PSIGNB (BX), M2                 // 0f380813
+	//TODO: PSIGNB (R11), M2                // 410f380813
+	//TODO: PSIGNB M2, M2                   // 0f3808d2
+	//TODO: PSIGNB M3, M2                   // 0f3808d3
+	//TODO: PSIGNB (BX), M3                 // 0f38081b
+	//TODO: PSIGNB (R11), M3                // 410f38081b
+	//TODO: PSIGNB M2, M3                   // 0f3808da
+	//TODO: PSIGNB M3, M3                   // 0f3808db
+	//TODO: PSIGNB (BX), X2                 // 660f380813
+	//TODO: PSIGNB (R11), X2                // 66410f380813
+	//TODO: PSIGNB X2, X2                   // 660f3808d2
+	//TODO: PSIGNB X11, X2                  // 66410f3808d3
+	//TODO: PSIGNB (BX), X11                // 66440f38081b
+	//TODO: PSIGNB (R11), X11               // 66450f38081b
+	//TODO: PSIGNB X2, X11                  // 66440f3808da
+	//TODO: PSIGNB X11, X11                 // 66450f3808db
+	//TODO: PSIGND (BX), M2                 // 0f380a13
+	//TODO: PSIGND (R11), M2                // 410f380a13
+	//TODO: PSIGND M2, M2                   // 0f380ad2
+	//TODO: PSIGND M3, M2                   // 0f380ad3
+	//TODO: PSIGND (BX), M3                 // 0f380a1b
+	//TODO: PSIGND (R11), M3                // 410f380a1b
+	//TODO: PSIGND M2, M3                   // 0f380ada
+	//TODO: PSIGND M3, M3                   // 0f380adb
+	//TODO: PSIGND (BX), X2                 // 660f380a13
+	//TODO: PSIGND (R11), X2                // 66410f380a13
+	//TODO: PSIGND X2, X2                   // 660f380ad2
+	//TODO: PSIGND X11, X2                  // 66410f380ad3
+	//TODO: PSIGND (BX), X11                // 66440f380a1b
+	//TODO: PSIGND (R11), X11               // 66450f380a1b
+	//TODO: PSIGND X2, X11                  // 66440f380ada
+	//TODO: PSIGND X11, X11                 // 66450f380adb
+	//TODO: PSIGNW (BX), M2                 // 0f380913
+	//TODO: PSIGNW (R11), M2                // 410f380913
+	//TODO: PSIGNW M2, M2                   // 0f3809d2
+	//TODO: PSIGNW M3, M2                   // 0f3809d3
+	//TODO: PSIGNW (BX), M3                 // 0f38091b
+	//TODO: PSIGNW (R11), M3                // 410f38091b
+	//TODO: PSIGNW M2, M3                   // 0f3809da
+	//TODO: PSIGNW M3, M3                   // 0f3809db
+	//TODO: PSIGNW (BX), X2                 // 660f380913
+	//TODO: PSIGNW (R11), X2                // 66410f380913
+	//TODO: PSIGNW X2, X2                   // 660f3809d2
+	//TODO: PSIGNW X11, X2                  // 66410f3809d3
+	//TODO: PSIGNW (BX), X11                // 66440f38091b
+	//TODO: PSIGNW (R11), X11               // 66450f38091b
+	//TODO: PSIGNW X2, X11                  // 66440f3809da
+	//TODO: PSIGNW X11, X11                 // 66450f3809db
+	PSLLL (BX), M2                          // 0ff213
+	PSLLL (R11), M2                         // 410ff213
+	PSLLL M2, M2                            // 0ff2d2
+	PSLLL M3, M2                            // 0ff2d3
+	PSLLL (BX), M3                          // 0ff21b
+	PSLLL (R11), M3                         // 410ff21b
+	PSLLL M2, M3                            // 0ff2da
+	PSLLL M3, M3                            // 0ff2db
+	PSLLL $7, M2                            // 0f72f207
+	PSLLL $7, M3                            // 0f72f307
+	PSLLL (BX), X2                          // 660ff213
+	PSLLL (R11), X2                         // 66410ff213
+	PSLLL X2, X2                            // 660ff2d2
+	PSLLL X11, X2                           // 66410ff2d3
+	PSLLL (BX), X11                         // 66440ff21b
+	PSLLL (R11), X11                        // 66450ff21b
+	PSLLL X2, X11                           // 66440ff2da
+	PSLLL X11, X11                          // 66450ff2db
+	PSLLL $7, X2                            // 660f72f207
+	PSLLL $7, X11                           // 66410f72f307
+	PSLLO $7, X2                            // 660f73fa07
+	PSLLO $7, X11                           // 66410f73fb07
+	PSLLQ (BX), M2                          // 0ff313
+	PSLLQ (R11), M2                         // 410ff313
+	PSLLQ M2, M2                            // 0ff3d2
+	PSLLQ M3, M2                            // 0ff3d3
+	PSLLQ (BX), M3                          // 0ff31b
+	PSLLQ (R11), M3                         // 410ff31b
+	PSLLQ M2, M3                            // 0ff3da
+	PSLLQ M3, M3                            // 0ff3db
+	PSLLQ $7, M2                            // 0f73f207
+	PSLLQ $7, M3                            // 0f73f307
+	PSLLQ (BX), X2                          // 660ff313
+	PSLLQ (R11), X2                         // 66410ff313
+	PSLLQ X2, X2                            // 660ff3d2
+	PSLLQ X11, X2                           // 66410ff3d3
+	PSLLQ (BX), X11                         // 66440ff31b
+	PSLLQ (R11), X11                        // 66450ff31b
+	PSLLQ X2, X11                           // 66440ff3da
+	PSLLQ X11, X11                          // 66450ff3db
+	PSLLQ $7, X2                            // 660f73f207
+	PSLLQ $7, X11                           // 66410f73f307
+	PSLLW (BX), M2                          // 0ff113
+	PSLLW (R11), M2                         // 410ff113
+	PSLLW M2, M2                            // 0ff1d2
+	PSLLW M3, M2                            // 0ff1d3
+	PSLLW (BX), M3                          // 0ff11b
+	PSLLW (R11), M3                         // 410ff11b
+	PSLLW M2, M3                            // 0ff1da
+	PSLLW M3, M3                            // 0ff1db
+	PSLLW $7, M2                            // 0f71f207
+	PSLLW $7, M3                            // 0f71f307
+	PSLLW (BX), X2                          // 660ff113
+	PSLLW (R11), X2                         // 66410ff113
+	PSLLW X2, X2                            // 660ff1d2
+	PSLLW X11, X2                           // 66410ff1d3
+	PSLLW (BX), X11                         // 66440ff11b
+	PSLLW (R11), X11                        // 66450ff11b
+	PSLLW X2, X11                           // 66440ff1da
+	PSLLW X11, X11                          // 66450ff1db
+	PSLLW $7, X2                            // 660f71f207
+	PSLLW $7, X11                           // 66410f71f307
+	PSRAL (BX), M2                          // 0fe213
+	PSRAL (R11), M2                         // 410fe213
+	PSRAL M2, M2                            // 0fe2d2
+	PSRAL M3, M2                            // 0fe2d3
+	PSRAL (BX), M3                          // 0fe21b
+	PSRAL (R11), M3                         // 410fe21b
+	PSRAL M2, M3                            // 0fe2da
+	PSRAL M3, M3                            // 0fe2db
+	PSRAL $7, M2                            // 0f72e207
+	PSRAL $7, M3                            // 0f72e307
+	PSRAL (BX), X2                          // 660fe213
+	PSRAL (R11), X2                         // 66410fe213
+	PSRAL X2, X2                            // 660fe2d2
+	PSRAL X11, X2                           // 66410fe2d3
+	PSRAL (BX), X11                         // 66440fe21b
+	PSRAL (R11), X11                        // 66450fe21b
+	PSRAL X2, X11                           // 66440fe2da
+	PSRAL X11, X11                          // 66450fe2db
+	PSRAL $7, X2                            // 660f72e207
+	PSRAL $7, X11                           // 66410f72e307
+	PSRAW (BX), M2                          // 0fe113
+	PSRAW (R11), M2                         // 410fe113
+	PSRAW M2, M2                            // 0fe1d2
+	PSRAW M3, M2                            // 0fe1d3
+	PSRAW (BX), M3                          // 0fe11b
+	PSRAW (R11), M3                         // 410fe11b
+	PSRAW M2, M3                            // 0fe1da
+	PSRAW M3, M3                            // 0fe1db
+	PSRAW $7, M2                            // 0f71e207
+	PSRAW $7, M3                            // 0f71e307
+	PSRAW (BX), X2                          // 660fe113
+	PSRAW (R11), X2                         // 66410fe113
+	PSRAW X2, X2                            // 660fe1d2
+	PSRAW X11, X2                           // 66410fe1d3
+	PSRAW (BX), X11                         // 66440fe11b
+	PSRAW (R11), X11                        // 66450fe11b
+	PSRAW X2, X11                           // 66440fe1da
+	PSRAW X11, X11                          // 66450fe1db
+	PSRAW $7, X2                            // 660f71e207
+	PSRAW $7, X11                           // 66410f71e307
+	PSRLL (BX), M2                          // 0fd213
+	PSRLL (R11), M2                         // 410fd213
+	PSRLL M2, M2                            // 0fd2d2
+	PSRLL M3, M2                            // 0fd2d3
+	PSRLL (BX), M3                          // 0fd21b
+	PSRLL (R11), M3                         // 410fd21b
+	PSRLL M2, M3                            // 0fd2da
+	PSRLL M3, M3                            // 0fd2db
+	PSRLL $7, M2                            // 0f72d207
+	PSRLL $7, M3                            // 0f72d307
+	PSRLL (BX), X2                          // 660fd213
+	PSRLL (R11), X2                         // 66410fd213
+	PSRLL X2, X2                            // 660fd2d2
+	PSRLL X11, X2                           // 66410fd2d3
+	PSRLL (BX), X11                         // 66440fd21b
+	PSRLL (R11), X11                        // 66450fd21b
+	PSRLL X2, X11                           // 66440fd2da
+	PSRLL X11, X11                          // 66450fd2db
+	PSRLL $7, X2                            // 660f72d207
+	PSRLL $7, X11                           // 66410f72d307
+	PSRLO $7, X2                            // 660f73da07
+	PSRLO $7, X11                           // 66410f73db07
+	PSRLQ (BX), M2                          // 0fd313
+	PSRLQ (R11), M2                         // 410fd313
+	PSRLQ M2, M2                            // 0fd3d2
+	PSRLQ M3, M2                            // 0fd3d3
+	PSRLQ (BX), M3                          // 0fd31b
+	PSRLQ (R11), M3                         // 410fd31b
+	PSRLQ M2, M3                            // 0fd3da
+	PSRLQ M3, M3                            // 0fd3db
+	PSRLQ $7, M2                            // 0f73d207
+	PSRLQ $7, M3                            // 0f73d307
+	PSRLQ (BX), X2                          // 660fd313
+	PSRLQ (R11), X2                         // 66410fd313
+	PSRLQ X2, X2                            // 660fd3d2
+	PSRLQ X11, X2                           // 66410fd3d3
+	PSRLQ (BX), X11                         // 66440fd31b
+	PSRLQ (R11), X11                        // 66450fd31b
+	PSRLQ X2, X11                           // 66440fd3da
+	PSRLQ X11, X11                          // 66450fd3db
+	PSRLQ $7, X2                            // 660f73d207
+	PSRLQ $7, X11                           // 66410f73d307
+	PSRLW (BX), M2                          // 0fd113
+	PSRLW (R11), M2                         // 410fd113
+	PSRLW M2, M2                            // 0fd1d2
+	PSRLW M3, M2                            // 0fd1d3
+	PSRLW (BX), M3                          // 0fd11b
+	PSRLW (R11), M3                         // 410fd11b
+	PSRLW M2, M3                            // 0fd1da
+	PSRLW M3, M3                            // 0fd1db
+	PSRLW $7, M2                            // 0f71d207
+	PSRLW $7, M3                            // 0f71d307
+	PSRLW (BX), X2                          // 660fd113
+	PSRLW (R11), X2                         // 66410fd113
+	PSRLW X2, X2                            // 660fd1d2
+	PSRLW X11, X2                           // 66410fd1d3
+	PSRLW (BX), X11                         // 66440fd11b
+	PSRLW (R11), X11                        // 66450fd11b
+	PSRLW X2, X11                           // 66440fd1da
+	PSRLW X11, X11                          // 66450fd1db
+	PSRLW $7, X2                            // 660f71d207
+	PSRLW $7, X11                           // 66410f71d307
+	//TODO: PSUBB (BX), M2                  // 0ff813
+	//TODO: PSUBB (R11), M2                 // 410ff813
+	//TODO: PSUBB M2, M2                    // 0ff8d2
+	//TODO: PSUBB M3, M2                    // 0ff8d3
+	//TODO: PSUBB (BX), M3                  // 0ff81b
+	//TODO: PSUBB (R11), M3                 // 410ff81b
+	//TODO: PSUBB M2, M3                    // 0ff8da
+	//TODO: PSUBB M3, M3                    // 0ff8db
+	PSUBB (BX), X2                          // 660ff813
+	PSUBB (R11), X2                         // 66410ff813
+	PSUBB X2, X2                            // 660ff8d2
+	PSUBB X11, X2                           // 66410ff8d3
+	PSUBB (BX), X11                         // 66440ff81b
+	PSUBB (R11), X11                        // 66450ff81b
+	PSUBB X2, X11                           // 66440ff8da
+	PSUBB X11, X11                          // 66450ff8db
+	//TODO: PSUBL (BX), M2                  // 0ffa13
+	//TODO: PSUBL (R11), M2                 // 410ffa13
+	//TODO: PSUBL M2, M2                    // 0ffad2
+	//TODO: PSUBL M3, M2                    // 0ffad3
+	//TODO: PSUBL (BX), M3                  // 0ffa1b
+	//TODO: PSUBL (R11), M3                 // 410ffa1b
+	//TODO: PSUBL M2, M3                    // 0ffada
+	//TODO: PSUBL M3, M3                    // 0ffadb
+	PSUBL (BX), X2                          // 660ffa13
+	PSUBL (R11), X2                         // 66410ffa13
+	PSUBL X2, X2                            // 660ffad2
+	PSUBL X11, X2                           // 66410ffad3
+	PSUBL (BX), X11                         // 66440ffa1b
+	PSUBL (R11), X11                        // 66450ffa1b
+	PSUBL X2, X11                           // 66440ffada
+	PSUBL X11, X11                          // 66450ffadb
+	//TODO: PSUBQ (BX), M2                  // 0ffb13
+	//TODO: PSUBQ (R11), M2                 // 410ffb13
+	//TODO: PSUBQ M2, M2                    // 0ffbd2
+	//TODO: PSUBQ M3, M2                    // 0ffbd3
+	//TODO: PSUBQ (BX), M3                  // 0ffb1b
+	//TODO: PSUBQ (R11), M3                 // 410ffb1b
+	//TODO: PSUBQ M2, M3                    // 0ffbda
+	//TODO: PSUBQ M3, M3                    // 0ffbdb
+	PSUBQ (BX), X2                          // 660ffb13
+	PSUBQ (R11), X2                         // 66410ffb13
+	PSUBQ X2, X2                            // 660ffbd2
+	PSUBQ X11, X2                           // 66410ffbd3
+	PSUBQ (BX), X11                         // 66440ffb1b
+	PSUBQ (R11), X11                        // 66450ffb1b
+	PSUBQ X2, X11                           // 66440ffbda
+	PSUBQ X11, X11                          // 66450ffbdb
+	//TODO: PSUBSB (BX), M2                 // 0fe813
+	//TODO: PSUBSB (R11), M2                // 410fe813
+	//TODO: PSUBSB M2, M2                   // 0fe8d2
+	//TODO: PSUBSB M3, M2                   // 0fe8d3
+	//TODO: PSUBSB (BX), M3                 // 0fe81b
+	//TODO: PSUBSB (R11), M3                // 410fe81b
+	//TODO: PSUBSB M2, M3                   // 0fe8da
+	//TODO: PSUBSB M3, M3                   // 0fe8db
+	PSUBSB (BX), X2                         // 660fe813
+	PSUBSB (R11), X2                        // 66410fe813
+	PSUBSB X2, X2                           // 660fe8d2
+	PSUBSB X11, X2                          // 66410fe8d3
+	PSUBSB (BX), X11                        // 66440fe81b
+	PSUBSB (R11), X11                       // 66450fe81b
+	PSUBSB X2, X11                          // 66440fe8da
+	PSUBSB X11, X11                         // 66450fe8db
+	//TODO: PSUBSW (BX), M2                 // 0fe913
+	//TODO: PSUBSW (R11), M2                // 410fe913
+	//TODO: PSUBSW M2, M2                   // 0fe9d2
+	//TODO: PSUBSW M3, M2                   // 0fe9d3
+	//TODO: PSUBSW (BX), M3                 // 0fe91b
+	//TODO: PSUBSW (R11), M3                // 410fe91b
+	//TODO: PSUBSW M2, M3                   // 0fe9da
+	//TODO: PSUBSW M3, M3                   // 0fe9db
+	PSUBSW (BX), X2                         // 660fe913
+	PSUBSW (R11), X2                        // 66410fe913
+	PSUBSW X2, X2                           // 660fe9d2
+	PSUBSW X11, X2                          // 66410fe9d3
+	PSUBSW (BX), X11                        // 66440fe91b
+	PSUBSW (R11), X11                       // 66450fe91b
+	PSUBSW X2, X11                          // 66440fe9da
+	PSUBSW X11, X11                         // 66450fe9db
+	//TODO: PSUBUSB (BX), M2                // 0fd813
+	//TODO: PSUBUSB (R11), M2               // 410fd813
+	//TODO: PSUBUSB M2, M2                  // 0fd8d2
+	//TODO: PSUBUSB M3, M2                  // 0fd8d3
+	//TODO: PSUBUSB (BX), M3                // 0fd81b
+	//TODO: PSUBUSB (R11), M3               // 410fd81b
+	//TODO: PSUBUSB M2, M3                  // 0fd8da
+	//TODO: PSUBUSB M3, M3                  // 0fd8db
+	PSUBUSB (BX), X2                        // 660fd813
+	PSUBUSB (R11), X2                       // 66410fd813
+	PSUBUSB X2, X2                          // 660fd8d2
+	PSUBUSB X11, X2                         // 66410fd8d3
+	PSUBUSB (BX), X11                       // 66440fd81b
+	PSUBUSB (R11), X11                      // 66450fd81b
+	PSUBUSB X2, X11                         // 66440fd8da
+	PSUBUSB X11, X11                        // 66450fd8db
+	//TODO: PSUBUSW (BX), M2                // 0fd913
+	//TODO: PSUBUSW (R11), M2               // 410fd913
+	//TODO: PSUBUSW M2, M2                  // 0fd9d2
+	//TODO: PSUBUSW M3, M2                  // 0fd9d3
+	//TODO: PSUBUSW (BX), M3                // 0fd91b
+	//TODO: PSUBUSW (R11), M3               // 410fd91b
+	//TODO: PSUBUSW M2, M3                  // 0fd9da
+	//TODO: PSUBUSW M3, M3                  // 0fd9db
+	PSUBUSW (BX), X2                        // 660fd913
+	PSUBUSW (R11), X2                       // 66410fd913
+	PSUBUSW X2, X2                          // 660fd9d2
+	PSUBUSW X11, X2                         // 66410fd9d3
+	PSUBUSW (BX), X11                       // 66440fd91b
+	PSUBUSW (R11), X11                      // 66450fd91b
+	PSUBUSW X2, X11                         // 66440fd9da
+	PSUBUSW X11, X11                        // 66450fd9db
+	//TODO: PSUBW (BX), M2                  // 0ff913
+	//TODO: PSUBW (R11), M2                 // 410ff913
+	//TODO: PSUBW M2, M2                    // 0ff9d2
+	//TODO: PSUBW M3, M2                    // 0ff9d3
+	//TODO: PSUBW (BX), M3                  // 0ff91b
+	//TODO: PSUBW (R11), M3                 // 410ff91b
+	//TODO: PSUBW M2, M3                    // 0ff9da
+	//TODO: PSUBW M3, M3                    // 0ff9db
+	PSUBW (BX), X2                          // 660ff913
+	PSUBW (R11), X2                         // 66410ff913
+	PSUBW X2, X2                            // 660ff9d2
+	PSUBW X11, X2                           // 66410ff9d3
+	PSUBW (BX), X11                         // 66440ff91b
+	PSUBW (R11), X11                        // 66450ff91b
+	PSUBW X2, X11                           // 66440ff9da
+	PSUBW X11, X11                          // 66450ff9db
+	//TODO: PTEST (BX), X2                  // 660f381713
+	//TODO: PTEST (R11), X2                 // 66410f381713
+	//TODO: PTEST X2, X2                    // 660f3817d2
+	//TODO: PTEST X11, X2                   // 66410f3817d3
+	//TODO: PTEST (BX), X11                 // 66440f38171b
+	//TODO: PTEST (R11), X11                // 66450f38171b
+	//TODO: PTEST X2, X11                   // 66440f3817da
+	//TODO: PTEST X11, X11                  // 66450f3817db
+	PUNPCKHBW (BX), M2                      // 0f6813
+	PUNPCKHBW (R11), M2                     // 410f6813
+	PUNPCKHBW M2, M2                        // 0f68d2
+	PUNPCKHBW M3, M2                        // 0f68d3
+	PUNPCKHBW (BX), M3                      // 0f681b
+	PUNPCKHBW (R11), M3                     // 410f681b
+	PUNPCKHBW M2, M3                        // 0f68da
+	PUNPCKHBW M3, M3                        // 0f68db
+	PUNPCKHBW (BX), X2                      // 660f6813
+	PUNPCKHBW (R11), X2                     // 66410f6813
+	PUNPCKHBW X2, X2                        // 660f68d2
+	PUNPCKHBW X11, X2                       // 66410f68d3
+	PUNPCKHBW (BX), X11                     // 66440f681b
+	PUNPCKHBW (R11), X11                    // 66450f681b
+	PUNPCKHBW X2, X11                       // 66440f68da
+	PUNPCKHBW X11, X11                      // 66450f68db
+	PUNPCKHLQ (BX), M2                      // 0f6a13
+	PUNPCKHLQ (R11), M2                     // 410f6a13
+	PUNPCKHLQ M2, M2                        // 0f6ad2
+	PUNPCKHLQ M3, M2                        // 0f6ad3
+	PUNPCKHLQ (BX), M3                      // 0f6a1b
+	PUNPCKHLQ (R11), M3                     // 410f6a1b
+	PUNPCKHLQ M2, M3                        // 0f6ada
+	PUNPCKHLQ M3, M3                        // 0f6adb
+	PUNPCKHLQ (BX), X2                      // 660f6a13
+	PUNPCKHLQ (R11), X2                     // 66410f6a13
+	PUNPCKHLQ X2, X2                        // 660f6ad2
+	PUNPCKHLQ X11, X2                       // 66410f6ad3
+	PUNPCKHLQ (BX), X11                     // 66440f6a1b
+	PUNPCKHLQ (R11), X11                    // 66450f6a1b
+	PUNPCKHLQ X2, X11                       // 66440f6ada
+	PUNPCKHLQ X11, X11                      // 66450f6adb
+	PUNPCKHQDQ (BX), X2                     // 660f6d13
+	PUNPCKHQDQ (R11), X2                    // 66410f6d13
+	PUNPCKHQDQ X2, X2                       // 660f6dd2
+	PUNPCKHQDQ X11, X2                      // 66410f6dd3
+	PUNPCKHQDQ (BX), X11                    // 66440f6d1b
+	PUNPCKHQDQ (R11), X11                   // 66450f6d1b
+	PUNPCKHQDQ X2, X11                      // 66440f6dda
+	PUNPCKHQDQ X11, X11                     // 66450f6ddb
+	PUNPCKHWL (BX), M2                      // 0f6913
+	PUNPCKHWL (R11), M2                     // 410f6913
+	PUNPCKHWL M2, M2                        // 0f69d2
+	PUNPCKHWL M3, M2                        // 0f69d3
+	PUNPCKHWL (BX), M3                      // 0f691b
+	PUNPCKHWL (R11), M3                     // 410f691b
+	PUNPCKHWL M2, M3                        // 0f69da
+	PUNPCKHWL M3, M3                        // 0f69db
+	PUNPCKHWL (BX), X2                      // 660f6913
+	PUNPCKHWL (R11), X2                     // 66410f6913
+	PUNPCKHWL X2, X2                        // 660f69d2
+	PUNPCKHWL X11, X2                       // 66410f69d3
+	PUNPCKHWL (BX), X11                     // 66440f691b
+	PUNPCKHWL (R11), X11                    // 66450f691b
+	PUNPCKHWL X2, X11                       // 66440f69da
+	PUNPCKHWL X11, X11                      // 66450f69db
+	PUNPCKLBW (BX), M2                      // 0f6013
+	PUNPCKLBW (R11), M2                     // 410f6013
+	PUNPCKLBW M2, M2                        // 0f60d2
+	PUNPCKLBW M3, M2                        // 0f60d3
+	PUNPCKLBW (BX), M3                      // 0f601b
+	PUNPCKLBW (R11), M3                     // 410f601b
+	PUNPCKLBW M2, M3                        // 0f60da
+	PUNPCKLBW M3, M3                        // 0f60db
+	PUNPCKLBW (BX), X2                      // 660f6013
+	PUNPCKLBW (R11), X2                     // 66410f6013
+	PUNPCKLBW X2, X2                        // 660f60d2
+	PUNPCKLBW X11, X2                       // 66410f60d3
+	PUNPCKLBW (BX), X11                     // 66440f601b
+	PUNPCKLBW (R11), X11                    // 66450f601b
+	PUNPCKLBW X2, X11                       // 66440f60da
+	PUNPCKLBW X11, X11                      // 66450f60db
+	PUNPCKLLQ (BX), M2                      // 0f6213
+	PUNPCKLLQ (R11), M2                     // 410f6213
+	PUNPCKLLQ M2, M2                        // 0f62d2
+	PUNPCKLLQ M3, M2                        // 0f62d3
+	PUNPCKLLQ (BX), M3                      // 0f621b
+	PUNPCKLLQ (R11), M3                     // 410f621b
+	PUNPCKLLQ M2, M3                        // 0f62da
+	PUNPCKLLQ M3, M3                        // 0f62db
+	PUNPCKLLQ (BX), X2                      // 660f6213
+	PUNPCKLLQ (R11), X2                     // 66410f6213
+	PUNPCKLLQ X2, X2                        // 660f62d2
+	PUNPCKLLQ X11, X2                       // 66410f62d3
+	PUNPCKLLQ (BX), X11                     // 66440f621b
+	PUNPCKLLQ (R11), X11                    // 66450f621b
+	PUNPCKLLQ X2, X11                       // 66440f62da
+	PUNPCKLLQ X11, X11                      // 66450f62db
+	PUNPCKLQDQ (BX), X2                     // 660f6c13
+	PUNPCKLQDQ (R11), X2                    // 66410f6c13
+	PUNPCKLQDQ X2, X2                       // 660f6cd2
+	PUNPCKLQDQ X11, X2                      // 66410f6cd3
+	PUNPCKLQDQ (BX), X11                    // 66440f6c1b
+	PUNPCKLQDQ (R11), X11                   // 66450f6c1b
+	PUNPCKLQDQ X2, X11                      // 66440f6cda
+	PUNPCKLQDQ X11, X11                     // 66450f6cdb
+	PUNPCKLWL (BX), M2                      // 0f6113
+	PUNPCKLWL (R11), M2                     // 410f6113
+	PUNPCKLWL M2, M2                        // 0f61d2
+	PUNPCKLWL M3, M2                        // 0f61d3
+	PUNPCKLWL (BX), M3                      // 0f611b
+	PUNPCKLWL (R11), M3                     // 410f611b
+	PUNPCKLWL M2, M3                        // 0f61da
+	PUNPCKLWL M3, M3                        // 0f61db
+	PUNPCKLWL (BX), X2                      // 660f6113
+	PUNPCKLWL (R11), X2                     // 66410f6113
+	PUNPCKLWL X2, X2                        // 660f61d2
+	PUNPCKLWL X11, X2                       // 66410f61d3
+	PUNPCKLWL (BX), X11                     // 66440f611b
+	PUNPCKLWL (R11), X11                    // 66450f611b
+	PUNPCKLWL X2, X11                       // 66440f61da
+	PUNPCKLWL X11, X11                      // 66450f61db
+	PUSHQ FS                                // 0fa0
+	POPQ AX
+	PUSHQ GS                                // 0fa8
+	POPQ AX
+	PUSHW $61731                            // 666823f1
+	POPW AX
+	PUSHQ $4045620583                       // 68674523f1
+	POPQ AX
+	PUSHQ $7                                // 6a07
+	POPQ AX
+	PUSHW (BX)                              // 66ff33
+	POPW AX
+	PUSHW (R11)                             // 6641ff33
+	POPW AX
+	PUSHW DX                                // 66fff2 or 6652
+	POPW AX
+	PUSHW R11                               // 6641fff3 or 664153
+	POPW AX
+	PUSHQ (BX)                              // ff33
+	POPQ AX
+	PUSHQ (R11)                             // 41ff33
+	POPQ AX
+	PUSHQ DX                                // fff2 or 52
+	POPQ AX
+	PUSHQ R11                               // 41fff3 or 4153
+	POPQ AX
+	PUSHFW                                  // 669c
+	POPFW
+	PUSHFQ                                  // 9c
+	POPFQ
+	PXOR (BX), M2                           // 0fef13
+	PXOR (R11), M2                          // 410fef13
+	PXOR M2, M2                             // 0fefd2
+	PXOR M3, M2                             // 0fefd3
+	PXOR (BX), M3                           // 0fef1b
+	PXOR (R11), M3                          // 410fef1b
+	PXOR M2, M3                             // 0fefda
+	PXOR M3, M3                             // 0fefdb
+	PXOR (BX), X2                           // 660fef13
+	PXOR (R11), X2                          // 66410fef13
+	PXOR X2, X2                             // 660fefd2
+	PXOR X11, X2                            // 66410fefd3
+	PXOR (BX), X11                          // 66440fef1b
+	PXOR (R11), X11                         // 66450fef1b
+	PXOR X2, X11                            // 66440fefda
+	PXOR X11, X11                           // 66450fefdb
+	RCLW $1, (BX)                           // 66d113
+	RCLW $1, (R11)                          // 6641d113
+	RCLW $1, DX                             // 66d1d2
+	RCLW $1, R11                            // 6641d1d3
+	RCLW CL, (BX)                           // 66d313
+	RCLW CL, (R11)                          // 6641d313
+	RCLW CL, DX                             // 66d3d2
+	RCLW CL, R11                            // 6641d3d3
+	RCLW $7, (BX)                           // 66c11307
+	RCLW $7, (R11)                          // 6641c11307
+	RCLW $7, DX                             // 66c1d207
+	RCLW $7, R11                            // 6641c1d307
+	RCLL $1, (BX)                           // d113
+	RCLL $1, (R11)                          // 41d113
+	RCLL $1, DX                             // d1d2
+	RCLL $1, R11                            // 41d1d3
+	RCLL CL, (BX)                           // d313
+	RCLL CL, (R11)                          // 41d313
+	RCLL CL, DX                             // d3d2
+	RCLL CL, R11                            // 41d3d3
+	RCLL $7, (BX)                           // c11307
+	RCLL $7, (R11)                          // 41c11307
+	RCLL $7, DX                             // c1d207
+	RCLL $7, R11                            // 41c1d307
+	RCLQ $1, (BX)                           // 48d113
+	RCLQ $1, (R11)                          // 49d113
+	RCLQ $1, DX                             // 48d1d2
+	RCLQ $1, R11                            // 49d1d3
+	RCLQ CL, (BX)                           // 48d313
+	RCLQ CL, (R11)                          // 49d313
+	RCLQ CL, DX                             // 48d3d2
+	RCLQ CL, R11                            // 49d3d3
+	RCLQ $7, (BX)                           // 48c11307
+	RCLQ $7, (R11)                          // 49c11307
+	RCLQ $7, DX                             // 48c1d207
+	RCLQ $7, R11                            // 49c1d307
+	RCLB $1, (BX)                           // d013
+	RCLB $1, (R11)                          // 41d013
+	RCLB $1, DL                             // d0d2
+	RCLB $1, R11                            // 41d0d3
+	RCLB CL, (BX)                           // d213
+	RCLB CL, (R11)                          // 41d213
+	RCLB CL, DL                             // d2d2
+	RCLB CL, R11                            // 41d2d3
+	RCLB $7, (BX)                           // c01307
+	RCLB $7, (R11)                          // 41c01307
+	RCLB $7, DL                             // c0d207
+	RCLB $7, R11                            // 41c0d307
+	RCPPS (BX), X2                          // 0f5313
+	RCPPS (R11), X2                         // 410f5313
+	RCPPS X2, X2                            // 0f53d2
+	RCPPS X11, X2                           // 410f53d3
+	RCPPS (BX), X11                         // 440f531b
+	RCPPS (R11), X11                        // 450f531b
+	RCPPS X2, X11                           // 440f53da
+	RCPPS X11, X11                          // 450f53db
+	RCPSS (BX), X2                          // f30f5313
+	RCPSS (R11), X2                         // f3410f5313
+	RCPSS X2, X2                            // f30f53d2
+	RCPSS X11, X2                           // f3410f53d3
+	RCPSS (BX), X11                         // f3440f531b
+	RCPSS (R11), X11                        // f3450f531b
+	RCPSS X2, X11                           // f3440f53da
+	RCPSS X11, X11                          // f3450f53db
+	RCRW $1, (BX)                           // 66d11b
+	RCRW $1, (R11)                          // 6641d11b
+	RCRW $1, DX                             // 66d1da
+	RCRW $1, R11                            // 6641d1db
+	RCRW CL, (BX)                           // 66d31b
+	RCRW CL, (R11)                          // 6641d31b
+	RCRW CL, DX                             // 66d3da
+	RCRW CL, R11                            // 6641d3db
+	RCRW $7, (BX)                           // 66c11b07
+	RCRW $7, (R11)                          // 6641c11b07
+	RCRW $7, DX                             // 66c1da07
+	RCRW $7, R11                            // 6641c1db07
+	RCRL $1, (BX)                           // d11b
+	RCRL $1, (R11)                          // 41d11b
+	RCRL $1, DX                             // d1da
+	RCRL $1, R11                            // 41d1db
+	RCRL CL, (BX)                           // d31b
+	RCRL CL, (R11)                          // 41d31b
+	RCRL CL, DX                             // d3da
+	RCRL CL, R11                            // 41d3db
+	RCRL $7, (BX)                           // c11b07
+	RCRL $7, (R11)                          // 41c11b07
+	RCRL $7, DX                             // c1da07
+	RCRL $7, R11                            // 41c1db07
+	RCRQ $1, (BX)                           // 48d11b
+	RCRQ $1, (R11)                          // 49d11b
+	RCRQ $1, DX                             // 48d1da
+	RCRQ $1, R11                            // 49d1db
+	RCRQ CL, (BX)                           // 48d31b
+	RCRQ CL, (R11)                          // 49d31b
+	RCRQ CL, DX                             // 48d3da
+	RCRQ CL, R11                            // 49d3db
+	RCRQ $7, (BX)                           // 48c11b07
+	RCRQ $7, (R11)                          // 49c11b07
+	RCRQ $7, DX                             // 48c1da07
+	RCRQ $7, R11                            // 49c1db07
+	RCRB $1, (BX)                           // d01b
+	RCRB $1, (R11)                          // 41d01b
+	RCRB $1, DL                             // d0da
+	RCRB $1, R11                            // 41d0db
+	RCRB CL, (BX)                           // d21b
+	RCRB CL, (R11)                          // 41d21b
+	RCRB CL, DL                             // d2da
+	RCRB CL, R11                            // 41d2db
+	RCRB $7, (BX)                           // c01b07
+	RCRB $7, (R11)                          // 41c01b07
+	RCRB $7, DL                             // c0da07
+	RCRB $7, R11                            // 41c0db07
+	//TODO: RDFSBASE DX                     // f30faec2 or f3480faec2
+	//TODO: RDFSBASE R11                    // f3410faec3 or f3490faec3
+	//TODO: RDGSBASE DX                     // f30faeca or f3480faeca
+	//TODO: RDGSBASE R11                    // f3410faecb or f3490faecb
+	RDMSR                                   // 0f32
+	//TODO: RDPKRU                          // 0f01ee
+	RDPMC                                   // 0f33
+	//TODO: RDRAND DX                       // 660fc7f2 or 0fc7f2 or 480fc7f2
+	//TODO: RDRAND R11                      // 66410fc7f3 or 410fc7f3 or 490fc7f3
+	//TODO: RDSEED DX                       // 660fc7fa or 0fc7fa or 480fc7fa
+	//TODO: RDSEED R11                      // 66410fc7fb or 410fc7fb or 490fc7fb
+	RDTSC                                   // 0f31
+	//TODO: RDTSCP                          // 0f01f9
+	JCS 2(PC)
+	//TODO: RETQ                            // c3
+	JCS 2(PC)
+	//TODO: RETQ $0xf123                    // c223f1
+	JCS 2(PC)
+	//TODO: RETFQ                           // cb
+	JCS 2(PC)
+	//TODO: RETFQ $0xf123                   // ca23f1
+	ROLW $1, (BX)                           // 66d103
+	ROLW $1, (R11)                          // 6641d103
+	ROLW $1, DX                             // 66d1c2
+	ROLW $1, R11                            // 6641d1c3
+	ROLW CL, (BX)                           // 66d303
+	ROLW CL, (R11)                          // 6641d303
+	ROLW CL, DX                             // 66d3c2
+	ROLW CL, R11                            // 6641d3c3
+	ROLW $7, (BX)                           // 66c10307
+	ROLW $7, (R11)                          // 6641c10307
+	ROLW $7, DX                             // 66c1c207
+	ROLW $7, R11                            // 6641c1c307
+	ROLL $1, (BX)                           // d103
+	ROLL $1, (R11)                          // 41d103
+	ROLL $1, DX                             // d1c2
+	ROLL $1, R11                            // 41d1c3
+	ROLL CL, (BX)                           // d303
+	ROLL CL, (R11)                          // 41d303
+	ROLL CL, DX                             // d3c2
+	ROLL CL, R11                            // 41d3c3
+	ROLL $7, (BX)                           // c10307
+	ROLL $7, (R11)                          // 41c10307
+	ROLL $7, DX                             // c1c207
+	ROLL $7, R11                            // 41c1c307
+	ROLQ $1, (BX)                           // 48d103
+	ROLQ $1, (R11)                          // 49d103
+	ROLQ $1, DX                             // 48d1c2
+	ROLQ $1, R11                            // 49d1c3
+	ROLQ CL, (BX)                           // 48d303
+	ROLQ CL, (R11)                          // 49d303
+	ROLQ CL, DX                             // 48d3c2
+	ROLQ CL, R11                            // 49d3c3
+	ROLQ $7, (BX)                           // 48c10307
+	ROLQ $7, (R11)                          // 49c10307
+	ROLQ $7, DX                             // 48c1c207
+	ROLQ $7, R11                            // 49c1c307
+	ROLB $1, (BX)                           // d003
+	ROLB $1, (R11)                          // 41d003
+	ROLB $1, DL                             // d0c2
+	ROLB $1, R11                            // 41d0c3
+	ROLB CL, (BX)                           // d203
+	ROLB CL, (R11)                          // 41d203
+	ROLB CL, DL                             // d2c2
+	ROLB CL, R11                            // 41d2c3
+	ROLB $7, (BX)                           // c00307
+	ROLB $7, (R11)                          // 41c00307
+	ROLB $7, DL                             // c0c207
+	ROLB $7, R11                            // 41c0c307
+	RORW $1, (BX)                           // 66d10b
+	RORW $1, (R11)                          // 6641d10b
+	RORW $1, DX                             // 66d1ca
+	RORW $1, R11                            // 6641d1cb
+	RORW CL, (BX)                           // 66d30b
+	RORW CL, (R11)                          // 6641d30b
+	RORW CL, DX                             // 66d3ca
+	RORW CL, R11                            // 6641d3cb
+	RORW $7, (BX)                           // 66c10b07
+	RORW $7, (R11)                          // 6641c10b07
+	RORW $7, DX                             // 66c1ca07
+	RORW $7, R11                            // 6641c1cb07
+	RORL $1, (BX)                           // d10b
+	RORL $1, (R11)                          // 41d10b
+	RORL $1, DX                             // d1ca
+	RORL $1, R11                            // 41d1cb
+	RORL CL, (BX)                           // d30b
+	RORL CL, (R11)                          // 41d30b
+	RORL CL, DX                             // d3ca
+	RORL CL, R11                            // 41d3cb
+	RORL $7, (BX)                           // c10b07
+	RORL $7, (R11)                          // 41c10b07
+	RORL $7, DX                             // c1ca07
+	RORL $7, R11                            // 41c1cb07
+	RORQ $1, (BX)                           // 48d10b
+	RORQ $1, (R11)                          // 49d10b
+	RORQ $1, DX                             // 48d1ca
+	RORQ $1, R11                            // 49d1cb
+	RORQ CL, (BX)                           // 48d30b
+	RORQ CL, (R11)                          // 49d30b
+	RORQ CL, DX                             // 48d3ca
+	RORQ CL, R11                            // 49d3cb
+	RORQ $7, (BX)                           // 48c10b07
+	RORQ $7, (R11)                          // 49c10b07
+	RORQ $7, DX                             // 48c1ca07
+	RORQ $7, R11                            // 49c1cb07
+	RORB $1, (BX)                           // d00b
+	RORB $1, (R11)                          // 41d00b
+	RORB $1, DL                             // d0ca
+	RORB $1, R11                            // 41d0cb
+	RORB CL, (BX)                           // d20b
+	RORB CL, (R11)                          // 41d20b
+	RORB CL, DL                             // d2ca
+	RORB CL, R11                            // 41d2cb
+	RORB $7, (BX)                           // c00b07
+	RORB $7, (R11)                          // 41c00b07
+	RORB $7, DL                             // c0ca07
+	RORB $7, R11                            // 41c0cb07
+	//TODO: RORXL $7, (BX), DX              // c4e37bf01307
+	//TODO: RORXL $7, (R11), DX             // c4c37bf01307
+	//TODO: RORXL $7, DX, DX                // c4e37bf0d207
+	//TODO: RORXL $7, R11, DX               // c4c37bf0d307
+	//TODO: RORXL $7, (BX), R11             // c4637bf01b07
+	//TODO: RORXL $7, (R11), R11            // c4437bf01b07
+	//TODO: RORXL $7, DX, R11               // c4637bf0da07
+	//TODO: RORXL $7, R11, R11              // c4437bf0db07
+	//TODO: RORXQ $7, (BX), DX              // c4e3fbf01307
+	//TODO: RORXQ $7, (R11), DX             // c4c3fbf01307
+	//TODO: RORXQ $7, DX, DX                // c4e3fbf0d207
+	//TODO: RORXQ $7, R11, DX               // c4c3fbf0d307
+	//TODO: RORXQ $7, (BX), R11             // c463fbf01b07
+	//TODO: RORXQ $7, (R11), R11            // c443fbf01b07
+	//TODO: RORXQ $7, DX, R11               // c463fbf0da07
+	//TODO: RORXQ $7, R11, R11              // c443fbf0db07
+	ROUNDPD $7, (BX), X2                    // 660f3a091307
+	ROUNDPD $7, (R11), X2                   // 66410f3a091307
+	ROUNDPD $7, X2, X2                      // 660f3a09d207
+	ROUNDPD $7, X11, X2                     // 66410f3a09d307
+	ROUNDPD $7, (BX), X11                   // 66440f3a091b07
+	ROUNDPD $7, (R11), X11                  // 66450f3a091b07
+	ROUNDPD $7, X2, X11                     // 66440f3a09da07
+	ROUNDPD $7, X11, X11                    // 66450f3a09db07
+	ROUNDPS $7, (BX), X2                    // 660f3a081307
+	ROUNDPS $7, (R11), X2                   // 66410f3a081307
+	ROUNDPS $7, X2, X2                      // 660f3a08d207
+	ROUNDPS $7, X11, X2                     // 66410f3a08d307
+	ROUNDPS $7, (BX), X11                   // 66440f3a081b07
+	ROUNDPS $7, (R11), X11                  // 66450f3a081b07
+	ROUNDPS $7, X2, X11                     // 66440f3a08da07
+	ROUNDPS $7, X11, X11                    // 66450f3a08db07
+	ROUNDSD $7, (BX), X2                    // 660f3a0b1307
+	ROUNDSD $7, (R11), X2                   // 66410f3a0b1307
+	ROUNDSD $7, X2, X2                      // 660f3a0bd207
+	ROUNDSD $7, X11, X2                     // 66410f3a0bd307
+	ROUNDSD $7, (BX), X11                   // 66440f3a0b1b07
+	ROUNDSD $7, (R11), X11                  // 66450f3a0b1b07
+	ROUNDSD $7, X2, X11                     // 66440f3a0bda07
+	ROUNDSD $7, X11, X11                    // 66450f3a0bdb07
+	ROUNDSS $7, (BX), X2                    // 660f3a0a1307
+	ROUNDSS $7, (R11), X2                   // 66410f3a0a1307
+	ROUNDSS $7, X2, X2                      // 660f3a0ad207
+	ROUNDSS $7, X11, X2                     // 66410f3a0ad307
+	ROUNDSS $7, (BX), X11                   // 66440f3a0a1b07
+	ROUNDSS $7, (R11), X11                  // 66450f3a0a1b07
+	ROUNDSS $7, X2, X11                     // 66440f3a0ada07
+	ROUNDSS $7, X11, X11                    // 66450f3a0adb07
+	RSM                                     // 0faa
+	RSQRTPS (BX), X2                        // 0f5213
+	RSQRTPS (R11), X2                       // 410f5213
+	RSQRTPS X2, X2                          // 0f52d2
+	RSQRTPS X11, X2                         // 410f52d3
+	RSQRTPS (BX), X11                       // 440f521b
+	RSQRTPS (R11), X11                      // 450f521b
+	RSQRTPS X2, X11                         // 440f52da
+	RSQRTPS X11, X11                        // 450f52db
+	RSQRTSS (BX), X2                        // f30f5213
+	RSQRTSS (R11), X2                       // f3410f5213
+	RSQRTSS X2, X2                          // f30f52d2
+	RSQRTSS X11, X2                         // f3410f52d3
+	RSQRTSS (BX), X11                       // f3440f521b
+	RSQRTSS (R11), X11                      // f3450f521b
+	RSQRTSS X2, X11                         // f3440f52da
+	RSQRTSS X11, X11                        // f3450f52db
+	//TODO: SAHF                            // 9e
+	SARW $1, (BX)                           // 66d13b
+	SARW $1, (R11)                          // 6641d13b
+	SARW $1, DX                             // 66d1fa
+	SARW $1, R11                            // 6641d1fb
+	SARW CL, (BX)                           // 66d33b
+	SARW CL, (R11)                          // 6641d33b
+	SARW CL, DX                             // 66d3fa
+	SARW CL, R11                            // 6641d3fb
+	SARW $7, (BX)                           // 66c13b07
+	SARW $7, (R11)                          // 6641c13b07
+	SARW $7, DX                             // 66c1fa07
+	SARW $7, R11                            // 6641c1fb07
+	SARL $1, (BX)                           // d13b
+	SARL $1, (R11)                          // 41d13b
+	SARL $1, DX                             // d1fa
+	SARL $1, R11                            // 41d1fb
+	SARL CL, (BX)                           // d33b
+	SARL CL, (R11)                          // 41d33b
+	SARL CL, DX                             // d3fa
+	SARL CL, R11                            // 41d3fb
+	SARL $7, (BX)                           // c13b07
+	SARL $7, (R11)                          // 41c13b07
+	SARL $7, DX                             // c1fa07
+	SARL $7, R11                            // 41c1fb07
+	SARQ $1, (BX)                           // 48d13b
+	SARQ $1, (R11)                          // 49d13b
+	SARQ $1, DX                             // 48d1fa
+	SARQ $1, R11                            // 49d1fb
+	SARQ CL, (BX)                           // 48d33b
+	SARQ CL, (R11)                          // 49d33b
+	SARQ CL, DX                             // 48d3fa
+	SARQ CL, R11                            // 49d3fb
+	SARQ $7, (BX)                           // 48c13b07
+	SARQ $7, (R11)                          // 49c13b07
+	SARQ $7, DX                             // 48c1fa07
+	SARQ $7, R11                            // 49c1fb07
+	SARB $1, (BX)                           // d03b
+	SARB $1, (R11)                          // 41d03b
+	SARB $1, DL                             // d0fa
+	SARB $1, R11                            // 41d0fb
+	SARB CL, (BX)                           // d23b
+	SARB CL, (R11)                          // 41d23b
+	SARB CL, DL                             // d2fa
+	SARB CL, R11                            // 41d2fb
+	SARB $7, (BX)                           // c03b07
+	SARB $7, (R11)                          // 41c03b07
+	SARB $7, DL                             // c0fa07
+	SARB $7, R11                            // 41c0fb07
+	SARXL R9, (BX), DX                      // c4e232f713
+	SARXL R9, (R11), DX                     // c4c232f713
+	SARXL R9, DX, DX                        // c4e232f7d2
+	SARXL R9, R11, DX                       // c4c232f7d3
+	SARXL R9, (BX), R11                     // c46232f71b
+	SARXL R9, (R11), R11                    // c44232f71b
+	SARXL R9, DX, R11                       // c46232f7da
+	SARXL R9, R11, R11                      // c44232f7db
+	SARXQ R14, (BX), DX                     // c4e28af713
+	SARXQ R14, (R11), DX                    // c4c28af713
+	SARXQ R14, DX, DX                       // c4e28af7d2
+	SARXQ R14, R11, DX                      // c4c28af7d3
+	SARXQ R14, (BX), R11                    // c4628af71b
+	SARXQ R14, (R11), R11                   // c4428af71b
+	SARXQ R14, DX, R11                      // c4628af7da
+	SARXQ R14, R11, R11                     // c4428af7db
+	SBBB $7, AL                             // 1c07
+	SBBW $61731, AX                         // 661d23f1
+	SBBL $4045620583, AX                    // 1d674523f1
+	SBBQ $-249346713, AX                    // 481d674523f1
+	SBBW $61731, (BX)                       // 66811b23f1
+	SBBW $61731, (R11)                      // 6641811b23f1
+	SBBW $61731, DX                         // 6681da23f1
+	SBBW $61731, R11                        // 664181db23f1
+	SBBW $7, (BX)                           // 66831b07
+	SBBW $7, (R11)                          // 6641831b07
+	SBBW $7, DX                             // 6683da07
+	SBBW $7, R11                            // 664183db07
+	SBBW DX, (BX)                           // 661913
+	SBBW R11, (BX)                          // 6644191b
+	SBBW DX, (R11)                          // 66411913
+	SBBW R11, (R11)                         // 6645191b
+	SBBW DX, DX                             // 6619d2 or 661bd2
+	SBBW R11, DX                            // 664419da or 66411bd3
+	SBBW DX, R11                            // 664119d3 or 66441bda
+	SBBW R11, R11                           // 664519db or 66451bdb
+	SBBL $4045620583, (BX)                  // 811b674523f1
+	SBBL $4045620583, (R11)                 // 41811b674523f1
+	SBBL $4045620583, DX                    // 81da674523f1
+	SBBL $4045620583, R11                   // 4181db674523f1
+	SBBL $7, (BX)                           // 831b07
+	SBBL $7, (R11)                          // 41831b07
+	SBBL $7, DX                             // 83da07
+	SBBL $7, R11                            // 4183db07
+	SBBL DX, (BX)                           // 1913
+	SBBL R11, (BX)                          // 44191b
+	SBBL DX, (R11)                          // 411913
+	SBBL R11, (R11)                         // 45191b
+	SBBL DX, DX                             // 19d2 or 1bd2
+	SBBL R11, DX                            // 4419da or 411bd3
+	SBBL DX, R11                            // 4119d3 or 441bda
+	SBBL R11, R11                           // 4519db or 451bdb
+	SBBQ $-249346713, (BX)                  // 48811b674523f1
+	SBBQ $-249346713, (R11)                 // 49811b674523f1
+	SBBQ $-249346713, DX                    // 4881da674523f1
+	SBBQ $-249346713, R11                   // 4981db674523f1
+	SBBQ $7, (BX)                           // 48831b07
+	SBBQ $7, (R11)                          // 49831b07
+	SBBQ $7, DX                             // 4883da07
+	SBBQ $7, R11                            // 4983db07
+	SBBQ DX, (BX)                           // 481913
+	SBBQ R11, (BX)                          // 4c191b
+	SBBQ DX, (R11)                          // 491913
+	SBBQ R11, (R11)                         // 4d191b
+	SBBQ DX, DX                             // 4819d2 or 481bd2
+	SBBQ R11, DX                            // 4c19da or 491bd3
+	SBBQ DX, R11                            // 4919d3 or 4c1bda
+	SBBQ R11, R11                           // 4d19db or 4d1bdb
+	SBBB $7, (BX)                           // 801b07
+	SBBB $7, (R11)                          // 41801b07
+	SBBB $7, DL                             // 80da07
+	SBBB $7, R11                            // 4180db07
+	SBBB DL, (BX)                           // 1813
+	SBBB R11, (BX)                          // 44181b
+	SBBB DL, (R11)                          // 411813
+	SBBB R11, (R11)                         // 45181b
+	SBBB DL, DL                             // 18d2 or 1ad2
+	SBBB R11, DL                            // 4418da or 411ad3
+	SBBB DL, R11                            // 4118d3 or 441ada
+	SBBB R11, R11                           // 4518db or 451adb
+	SBBW (BX), DX                           // 661b13
+	SBBW (R11), DX                          // 66411b13
+	SBBW (BX), R11                          // 66441b1b
+	SBBW (R11), R11                         // 66451b1b
+	SBBL (BX), DX                           // 1b13
+	SBBL (R11), DX                          // 411b13
+	SBBL (BX), R11                          // 441b1b
+	SBBL (R11), R11                         // 451b1b
+	SBBQ (BX), DX                           // 481b13
+	SBBQ (R11), DX                          // 491b13
+	SBBQ (BX), R11                          // 4c1b1b
+	SBBQ (R11), R11                         // 4d1b1b
+	SBBB (BX), DL                           // 1a13
+	SBBB (R11), DL                          // 411a13
+	SBBB (BX), R11                          // 441a1b
+	SBBB (R11), R11                         // 451a1b
+	SCASB                                   // ae
+	SCASL                                   // af
+	SCASQ                                   // 48af
+	SCASW                                   // 66af
+	SETHI (BX)                              // 0f9703
+	SETHI (R11)                             // 410f9703
+	SETHI DL                                // 0f97c2
+	SETHI R11                               // 410f97c3
+	SETCC (BX)                              // 0f9303
+	SETCC (R11)                             // 410f9303
+	SETCC DL                                // 0f93c2
+	SETCC R11                               // 410f93c3
+	SETCS (BX)                              // 0f9203
+	SETCS (R11)                             // 410f9203
+	SETCS DL                                // 0f92c2
+	SETCS R11                               // 410f92c3
+	SETLS (BX)                              // 0f9603
+	SETLS (R11)                             // 410f9603
+	SETLS DL                                // 0f96c2
+	SETLS R11                               // 410f96c3
+	SETEQ (BX)                              // 0f9403
+	SETEQ (R11)                             // 410f9403
+	SETEQ DL                                // 0f94c2
+	SETEQ R11                               // 410f94c3
+	SETGT (BX)                              // 0f9f03
+	SETGT (R11)                             // 410f9f03
+	SETGT DL                                // 0f9fc2
+	SETGT R11                               // 410f9fc3
+	SETGE (BX)                              // 0f9d03
+	SETGE (R11)                             // 410f9d03
+	SETGE DL                                // 0f9dc2
+	SETGE R11                               // 410f9dc3
+	SETLT (BX)                              // 0f9c03
+	SETLT (R11)                             // 410f9c03
+	SETLT DL                                // 0f9cc2
+	SETLT R11                               // 410f9cc3
+	SETLE (BX)                              // 0f9e03
+	SETLE (R11)                             // 410f9e03
+	SETLE DL                                // 0f9ec2
+	SETLE R11                               // 410f9ec3
+	SETNE (BX)                              // 0f9503
+	SETNE (R11)                             // 410f9503
+	SETNE DL                                // 0f95c2
+	SETNE R11                               // 410f95c3
+	SETOC (BX)                              // 0f9103
+	SETOC (R11)                             // 410f9103
+	SETOC DL                                // 0f91c2
+	SETOC R11                               // 410f91c3
+	SETPC (BX)                              // 0f9b03
+	SETPC (R11)                             // 410f9b03
+	SETPC DL                                // 0f9bc2
+	SETPC R11                               // 410f9bc3
+	SETPL (BX)                              // 0f9903
+	SETPL (R11)                             // 410f9903
+	SETPL DL                                // 0f99c2
+	SETPL R11                               // 410f99c3
+	SETOS (BX)                              // 0f9003
+	SETOS (R11)                             // 410f9003
+	SETOS DL                                // 0f90c2
+	SETOS R11                               // 410f90c3
+	SETPS (BX)                              // 0f9a03
+	SETPS (R11)                             // 410f9a03
+	SETPS DL                                // 0f9ac2
+	SETPS R11                               // 410f9ac3
+	SETMI (BX)                              // 0f9803
+	SETMI (R11)                             // 410f9803
+	SETMI DL                                // 0f98c2
+	SETMI R11                               // 410f98c3
+	SFENCE                                  // 0faef8
+	//TODO: SGDT (BX)                       // 0f0103
+	//TODO: SGDT (R11)                      // 410f0103
+	SHLW $1, (BX)                           // 66d123
+	SHLW $1, (R11)                          // 6641d123
+	SHLW $1, DX                             // 66d1e2
+	SHLW $1, R11                            // 6641d1e3
+	SHLW CL, (BX)                           // 66d323
+	SHLW CL, (R11)                          // 6641d323
+	SHLW CL, DX                             // 66d3e2
+	SHLW CL, R11                            // 6641d3e3
+	SHLW $7, (BX)                           // 66c12307
+	SHLW $7, (R11)                          // 6641c12307
+	SHLW $7, DX                             // 66c1e207
+	SHLW $7, R11                            // 6641c1e307
+	SHLL $1, (BX)                           // d123
+	SHLL $1, (R11)                          // 41d123
+	SHLL $1, DX                             // d1e2
+	SHLL $1, R11                            // 41d1e3
+	SHLL CL, (BX)                           // d323
+	SHLL CL, (R11)                          // 41d323
+	SHLL CL, DX                             // d3e2
+	SHLL CL, R11                            // 41d3e3
+	SHLL $7, (BX)                           // c12307
+	SHLL $7, (R11)                          // 41c12307
+	SHLL $7, DX                             // c1e207
+	SHLL $7, R11                            // 41c1e307
+	SHLQ $1, (BX)                           // 48d123
+	SHLQ $1, (R11)                          // 49d123
+	SHLQ $1, DX                             // 48d1e2
+	SHLQ $1, R11                            // 49d1e3
+	SHLQ CL, (BX)                           // 48d323
+	SHLQ CL, (R11)                          // 49d323
+	SHLQ CL, DX                             // 48d3e2
+	SHLQ CL, R11                            // 49d3e3
+	SHLQ $7, (BX)                           // 48c12307
+	SHLQ $7, (R11)                          // 49c12307
+	SHLQ $7, DX                             // 48c1e207
+	SHLQ $7, R11                            // 49c1e307
+	SHLB $1, (BX)                           // d023
+	SHLB $1, (R11)                          // 41d023
+	SHLB $1, DL                             // d0e2
+	SHLB $1, R11                            // 41d0e3
+	SHLB CL, (BX)                           // d223
+	SHLB CL, (R11)                          // 41d223
+	SHLB CL, DL                             // d2e2
+	SHLB CL, R11                            // 41d2e3
+	SHLB $7, (BX)                           // c02307
+	SHLB $7, (R11)                          // 41c02307
+	SHLB $7, DL                             // c0e207
+	SHLB $7, R11                            // 41c0e307
+	SHLW CL, DX, (BX)                       // 660fa513
+	SHLW CL, R11, (BX)                      // 66440fa51b
+	SHLW CL, DX, (R11)                      // 66410fa513
+	SHLW CL, R11, (R11)                     // 66450fa51b
+	SHLW CL, DX, DX                         // 660fa5d2
+	SHLW CL, R11, DX                        // 66440fa5da
+	SHLW CL, DX, R11                        // 66410fa5d3
+	SHLW CL, R11, R11                       // 66450fa5db
+	SHLW $7, DX, (BX)                       // 660fa41307
+	SHLW $7, R11, (BX)                      // 66440fa41b07
+	SHLW $7, DX, (R11)                      // 66410fa41307
+	SHLW $7, R11, (R11)                     // 66450fa41b07
+	SHLW $7, DX, DX                         // 660fa4d207
+	SHLW $7, R11, DX                        // 66440fa4da07
+	SHLW $7, DX, R11                        // 66410fa4d307
+	SHLW $7, R11, R11                       // 66450fa4db07
+	SHLL CL, DX, (BX)                       // 0fa513
+	SHLL CL, R11, (BX)                      // 440fa51b
+	SHLL CL, DX, (R11)                      // 410fa513
+	SHLL CL, R11, (R11)                     // 450fa51b
+	SHLL CL, DX, DX                         // 0fa5d2
+	SHLL CL, R11, DX                        // 440fa5da
+	SHLL CL, DX, R11                        // 410fa5d3
+	SHLL CL, R11, R11                       // 450fa5db
+	SHLL $7, DX, (BX)                       // 0fa41307
+	SHLL $7, R11, (BX)                      // 440fa41b07
+	SHLL $7, DX, (R11)                      // 410fa41307
+	SHLL $7, R11, (R11)                     // 450fa41b07
+	SHLL $7, DX, DX                         // 0fa4d207
+	SHLL $7, R11, DX                        // 440fa4da07
+	SHLL $7, DX, R11                        // 410fa4d307
+	SHLL $7, R11, R11                       // 450fa4db07
+	SHLQ CL, DX, (BX)                       // 480fa513
+	SHLQ CL, R11, (BX)                      // 4c0fa51b
+	SHLQ CL, DX, (R11)                      // 490fa513
+	SHLQ CL, R11, (R11)                     // 4d0fa51b
+	SHLQ CL, DX, DX                         // 480fa5d2
+	SHLQ CL, R11, DX                        // 4c0fa5da
+	SHLQ CL, DX, R11                        // 490fa5d3
+	SHLQ CL, R11, R11                       // 4d0fa5db
+	SHLQ $7, DX, (BX)                       // 480fa41307
+	SHLQ $7, R11, (BX)                      // 4c0fa41b07
+	SHLQ $7, DX, (R11)                      // 490fa41307
+	SHLQ $7, R11, (R11)                     // 4d0fa41b07
+	SHLQ $7, DX, DX                         // 480fa4d207
+	SHLQ $7, R11, DX                        // 4c0fa4da07
+	SHLQ $7, DX, R11                        // 490fa4d307
+	SHLQ $7, R11, R11                       // 4d0fa4db07
+	SHLXL R9, (BX), DX                      // c4e231f713
+	SHLXL R9, (R11), DX                     // c4c231f713
+	SHLXL R9, DX, DX                        // c4e231f7d2
+	SHLXL R9, R11, DX                       // c4c231f7d3
+	SHLXL R9, (BX), R11                     // c46231f71b
+	SHLXL R9, (R11), R11                    // c44231f71b
+	SHLXL R9, DX, R11                       // c46231f7da
+	SHLXL R9, R11, R11                      // c44231f7db
+	SHLXQ R14, (BX), DX                     // c4e289f713
+	SHLXQ R14, (R11), DX                    // c4c289f713
+	SHLXQ R14, DX, DX                       // c4e289f7d2
+	SHLXQ R14, R11, DX                      // c4c289f7d3
+	SHLXQ R14, (BX), R11                    // c46289f71b
+	SHLXQ R14, (R11), R11                   // c44289f71b
+	SHLXQ R14, DX, R11                      // c46289f7da
+	SHLXQ R14, R11, R11                     // c44289f7db
+	SHRW $1, (BX)                           // 66d12b
+	SHRW $1, (R11)                          // 6641d12b
+	SHRW $1, DX                             // 66d1ea
+	SHRW $1, R11                            // 6641d1eb
+	SHRW CL, (BX)                           // 66d32b
+	SHRW CL, (R11)                          // 6641d32b
+	SHRW CL, DX                             // 66d3ea
+	SHRW CL, R11                            // 6641d3eb
+	SHRW $7, (BX)                           // 66c12b07
+	SHRW $7, (R11)                          // 6641c12b07
+	SHRW $7, DX                             // 66c1ea07
+	SHRW $7, R11                            // 6641c1eb07
+	SHRL $1, (BX)                           // d12b
+	SHRL $1, (R11)                          // 41d12b
+	SHRL $1, DX                             // d1ea
+	SHRL $1, R11                            // 41d1eb
+	SHRL CL, (BX)                           // d32b
+	SHRL CL, (R11)                          // 41d32b
+	SHRL CL, DX                             // d3ea
+	SHRL CL, R11                            // 41d3eb
+	SHRL $7, (BX)                           // c12b07
+	SHRL $7, (R11)                          // 41c12b07
+	SHRL $7, DX                             // c1ea07
+	SHRL $7, R11                            // 41c1eb07
+	SHRQ $1, (BX)                           // 48d12b
+	SHRQ $1, (R11)                          // 49d12b
+	SHRQ $1, DX                             // 48d1ea
+	SHRQ $1, R11                            // 49d1eb
+	SHRQ CL, (BX)                           // 48d32b
+	SHRQ CL, (R11)                          // 49d32b
+	SHRQ CL, DX                             // 48d3ea
+	SHRQ CL, R11                            // 49d3eb
+	SHRQ $7, (BX)                           // 48c12b07
+	SHRQ $7, (R11)                          // 49c12b07
+	SHRQ $7, DX                             // 48c1ea07
+	SHRQ $7, R11                            // 49c1eb07
+	SHRB $1, (BX)                           // d02b
+	SHRB $1, (R11)                          // 41d02b
+	SHRB $1, DL                             // d0ea
+	SHRB $1, R11                            // 41d0eb
+	SHRB CL, (BX)                           // d22b
+	SHRB CL, (R11)                          // 41d22b
+	SHRB CL, DL                             // d2ea
+	SHRB CL, R11                            // 41d2eb
+	SHRB $7, (BX)                           // c02b07
+	SHRB $7, (R11)                          // 41c02b07
+	SHRB $7, DL                             // c0ea07
+	SHRB $7, R11                            // 41c0eb07
+	SHRW CL, DX, (BX)                       // 660fad13
+	SHRW CL, R11, (BX)                      // 66440fad1b
+	SHRW CL, DX, (R11)                      // 66410fad13
+	SHRW CL, R11, (R11)                     // 66450fad1b
+	SHRW CL, DX, DX                         // 660fadd2
+	SHRW CL, R11, DX                        // 66440fadda
+	SHRW CL, DX, R11                        // 66410fadd3
+	SHRW CL, R11, R11                       // 66450faddb
+	SHRW $7, DX, (BX)                       // 660fac1307
+	SHRW $7, R11, (BX)                      // 66440fac1b07
+	SHRW $7, DX, (R11)                      // 66410fac1307
+	SHRW $7, R11, (R11)                     // 66450fac1b07
+	SHRW $7, DX, DX                         // 660facd207
+	SHRW $7, R11, DX                        // 66440facda07
+	SHRW $7, DX, R11                        // 66410facd307
+	SHRW $7, R11, R11                       // 66450facdb07
+	SHRL CL, DX, (BX)                       // 0fad13
+	SHRL CL, R11, (BX)                      // 440fad1b
+	SHRL CL, DX, (R11)                      // 410fad13
+	SHRL CL, R11, (R11)                     // 450fad1b
+	SHRL CL, DX, DX                         // 0fadd2
+	SHRL CL, R11, DX                        // 440fadda
+	SHRL CL, DX, R11                        // 410fadd3
+	SHRL CL, R11, R11                       // 450faddb
+	SHRL $7, DX, (BX)                       // 0fac1307
+	SHRL $7, R11, (BX)                      // 440fac1b07
+	SHRL $7, DX, (R11)                      // 410fac1307
+	SHRL $7, R11, (R11)                     // 450fac1b07
+	SHRL $7, DX, DX                         // 0facd207
+	SHRL $7, R11, DX                        // 440facda07
+	SHRL $7, DX, R11                        // 410facd307
+	SHRL $7, R11, R11                       // 450facdb07
+	SHRQ CL, DX, (BX)                       // 480fad13
+	SHRQ CL, R11, (BX)                      // 4c0fad1b
+	SHRQ CL, DX, (R11)                      // 490fad13
+	SHRQ CL, R11, (R11)                     // 4d0fad1b
+	SHRQ CL, DX, DX                         // 480fadd2
+	SHRQ CL, R11, DX                        // 4c0fadda
+	SHRQ CL, DX, R11                        // 490fadd3
+	SHRQ CL, R11, R11                       // 4d0faddb
+	SHRQ $7, DX, (BX)                       // 480fac1307
+	SHRQ $7, R11, (BX)                      // 4c0fac1b07
+	SHRQ $7, DX, (R11)                      // 490fac1307
+	SHRQ $7, R11, (R11)                     // 4d0fac1b07
+	SHRQ $7, DX, DX                         // 480facd207
+	SHRQ $7, R11, DX                        // 4c0facda07
+	SHRQ $7, DX, R11                        // 490facd307
+	SHRQ $7, R11, R11                       // 4d0facdb07
+	SHRXL R9, (BX), DX                      // c4e233f713
+	SHRXL R9, (R11), DX                     // c4c233f713
+	SHRXL R9, DX, DX                        // c4e233f7d2
+	SHRXL R9, R11, DX                       // c4c233f7d3
+	SHRXL R9, (BX), R11                     // c46233f71b
+	SHRXL R9, (R11), R11                    // c44233f71b
+	SHRXL R9, DX, R11                       // c46233f7da
+	SHRXL R9, R11, R11                      // c44233f7db
+	SHRXQ R14, (BX), DX                     // c4e28bf713
+	SHRXQ R14, (R11), DX                    // c4c28bf713
+	SHRXQ R14, DX, DX                       // c4e28bf7d2
+	SHRXQ R14, R11, DX                      // c4c28bf7d3
+	SHRXQ R14, (BX), R11                    // c4628bf71b
+	SHRXQ R14, (R11), R11                   // c4428bf71b
+	SHRXQ R14, DX, R11                      // c4628bf7da
+	SHRXQ R14, R11, R11                     // c4428bf7db
+	SHUFPD $7, (BX), X2                     // 660fc61307
+	SHUFPD $7, (R11), X2                    // 66410fc61307
+	SHUFPD $7, X2, X2                       // 660fc6d207
+	SHUFPD $7, X11, X2                      // 66410fc6d307
+	SHUFPD $7, (BX), X11                    // 66440fc61b07
+	SHUFPD $7, (R11), X11                   // 66450fc61b07
+	SHUFPD $7, X2, X11                      // 66440fc6da07
+	SHUFPD $7, X11, X11                     // 66450fc6db07
+	SHUFPS $7, (BX), X2                     // 0fc61307
+	SHUFPS $7, (R11), X2                    // 410fc61307
+	SHUFPS $7, X2, X2                       // 0fc6d207
+	SHUFPS $7, X11, X2                      // 410fc6d307
+	SHUFPS $7, (BX), X11                    // 440fc61b07
+	SHUFPS $7, (R11), X11                   // 450fc61b07
+	SHUFPS $7, X2, X11                      // 440fc6da07
+	SHUFPS $7, X11, X11                     // 450fc6db07
+	//TODO: SIDT (BX)                       // 0f010b
+	//TODO: SIDT (R11)                      // 410f010b
+	//TODO: SLDTW (BX)                      // 660f0003
+	//TODO: SLDTW (R11)                     // 66410f0003
+	//TODO: SLDTW DX                        // 660f00c2
+	//TODO: SLDTW R11                       // 66410f00c3
+	//TODO: SLDTL (BX)                      // 0f0003
+	//TODO: SLDTL (R11)                     // 410f0003
+	//TODO: SLDTL DX                        // 0f00c2
+	//TODO: SLDTL R11                       // 410f00c3
+	//TODO: SLDTQ (BX)                      // 480f0003
+	//TODO: SLDTQ (R11)                     // 490f0003
+	//TODO: SLDTQ DX                        // 480f00c2
+	//TODO: SLDTQ R11                       // 490f00c3
+	//TODO: SMSWW (BX)                      // 660f0123
+	//TODO: SMSWW (R11)                     // 66410f0123
+	//TODO: SMSWW DX                        // 660f01e2
+	//TODO: SMSWW R11                       // 66410f01e3
+	//TODO: SMSWL (BX)                      // 0f0123
+	//TODO: SMSWL (R11)                     // 410f0123
+	//TODO: SMSWL DX                        // 0f01e2
+	//TODO: SMSWL R11                       // 410f01e3
+	//TODO: SMSWQ (BX)                      // 480f0123
+	//TODO: SMSWQ (R11)                     // 490f0123
+	//TODO: SMSWQ DX                        // 480f01e2
+	//TODO: SMSWQ R11                       // 490f01e3
+	SQRTPD (BX), X2                         // 660f5113
+	SQRTPD (R11), X2                        // 66410f5113
+	SQRTPD X2, X2                           // 660f51d2
+	SQRTPD X11, X2                          // 66410f51d3
+	SQRTPD (BX), X11                        // 66440f511b
+	SQRTPD (R11), X11                       // 66450f511b
+	SQRTPD X2, X11                          // 66440f51da
+	SQRTPD X11, X11                         // 66450f51db
+	SQRTPS (BX), X2                         // 0f5113
+	SQRTPS (R11), X2                        // 410f5113
+	SQRTPS X2, X2                           // 0f51d2
+	SQRTPS X11, X2                          // 410f51d3
+	SQRTPS (BX), X11                        // 440f511b
+	SQRTPS (R11), X11                       // 450f511b
+	SQRTPS X2, X11                          // 440f51da
+	SQRTPS X11, X11                         // 450f51db
+	SQRTSD (BX), X2                         // f20f5113
+	SQRTSD (R11), X2                        // f2410f5113
+	SQRTSD X2, X2                           // f20f51d2
+	SQRTSD X11, X2                          // f2410f51d3
+	SQRTSD (BX), X11                        // f2440f511b
+	SQRTSD (R11), X11                       // f2450f511b
+	SQRTSD X2, X11                          // f2440f51da
+	SQRTSD X11, X11                         // f2450f51db
+	SQRTSS (BX), X2                         // f30f5113
+	SQRTSS (R11), X2                        // f3410f5113
+	SQRTSS X2, X2                           // f30f51d2
+	SQRTSS X11, X2                          // f3410f51d3
+	SQRTSS (BX), X11                        // f3440f511b
+	SQRTSS (R11), X11                       // f3450f511b
+	SQRTSS X2, X11                          // f3440f51da
+	SQRTSS X11, X11                         // f3450f51db
+	//TODO: STAC                            // 0f01cb
+	STC                                     // f9
+	STD                                     // fd
+	STI                                     // fb
+	STMXCSR (BX)                            // 0fae1b
+	STMXCSR (R11)                           // 410fae1b
+	STOSB                                   // aa
+	STOSL                                   // ab
+	STOSQ                                   // 48ab
+	STOSW                                   // 66ab
+	//TODO: STRW (BX)                       // 660f000b
+	//TODO: STRW (R11)                      // 66410f000b
+	//TODO: STRW DX                         // 660f00ca
+	//TODO: STRW R11                        // 66410f00cb
+	//TODO: STRL (BX)                       // 0f000b
+	//TODO: STRL (R11)                      // 410f000b
+	//TODO: STRL DX                         // 0f00ca
+	//TODO: STRL R11                        // 410f00cb
+	//TODO: STRQ (BX)                       // 480f000b
+	//TODO: STRQ (R11)                      // 490f000b
+	//TODO: STRQ DX                         // 480f00ca
+	//TODO: STRQ R11                        // 490f00cb
+	SUBB $7, AL                             // 2c07
+	SUBW $61731, AX                         // 662d23f1
+	SUBL $4045620583, AX                    // 2d674523f1
+	SUBQ $-249346713, AX                    // 482d674523f1
+	SUBW $61731, (BX)                       // 66812b23f1
+	SUBW $61731, (R11)                      // 6641812b23f1
+	SUBW $61731, DX                         // 6681ea23f1
+	SUBW $61731, R11                        // 664181eb23f1
+	SUBW $7, (BX)                           // 66832b07
+	SUBW $7, (R11)                          // 6641832b07
+	SUBW $7, DX                             // 6683ea07
+	SUBW $7, R11                            // 664183eb07
+	SUBW DX, (BX)                           // 662913
+	SUBW R11, (BX)                          // 6644291b
+	SUBW DX, (R11)                          // 66412913
+	SUBW R11, (R11)                         // 6645291b
+	SUBW DX, DX                             // 6629d2 or 662bd2
+	SUBW R11, DX                            // 664429da or 66412bd3
+	SUBW DX, R11                            // 664129d3 or 66442bda
+	SUBW R11, R11                           // 664529db or 66452bdb
+	SUBL $4045620583, (BX)                  // 812b674523f1
+	SUBL $4045620583, (R11)                 // 41812b674523f1
+	SUBL $4045620583, DX                    // 81ea674523f1
+	SUBL $4045620583, R11                   // 4181eb674523f1
+	SUBL $7, (BX)                           // 832b07
+	SUBL $7, (R11)                          // 41832b07
+	SUBL $7, DX                             // 83ea07
+	SUBL $7, R11                            // 4183eb07
+	SUBL DX, (BX)                           // 2913
+	SUBL R11, (BX)                          // 44291b
+	SUBL DX, (R11)                          // 412913
+	SUBL R11, (R11)                         // 45291b
+	SUBL DX, DX                             // 29d2 or 2bd2
+	SUBL R11, DX                            // 4429da or 412bd3
+	SUBL DX, R11                            // 4129d3 or 442bda
+	SUBL R11, R11                           // 4529db or 452bdb
+	SUBQ $-249346713, (BX)                  // 48812b674523f1
+	SUBQ $-249346713, (R11)                 // 49812b674523f1
+	SUBQ $-249346713, DX                    // 4881ea674523f1
+	SUBQ $-249346713, R11                   // 4981eb674523f1
+	SUBQ $7, (BX)                           // 48832b07
+	SUBQ $7, (R11)                          // 49832b07
+	SUBQ $7, DX                             // 4883ea07
+	SUBQ $7, R11                            // 4983eb07
+	SUBQ DX, (BX)                           // 482913
+	SUBQ R11, (BX)                          // 4c291b
+	SUBQ DX, (R11)                          // 492913
+	SUBQ R11, (R11)                         // 4d291b
+	SUBQ DX, DX                             // 4829d2 or 482bd2
+	SUBQ R11, DX                            // 4c29da or 492bd3
+	SUBQ DX, R11                            // 4929d3 or 4c2bda
+	SUBQ R11, R11                           // 4d29db or 4d2bdb
+	SUBB $7, (BX)                           // 802b07
+	SUBB $7, (R11)                          // 41802b07
+	SUBB $7, DL                             // 80ea07
+	SUBB $7, R11                            // 4180eb07
+	SUBB DL, (BX)                           // 2813
+	SUBB R11, (BX)                          // 44281b
+	SUBB DL, (R11)                          // 412813
+	SUBB R11, (R11)                         // 45281b
+	SUBB DL, DL                             // 28d2 or 2ad2
+	SUBB R11, DL                            // 4428da or 412ad3
+	SUBB DL, R11                            // 4128d3 or 442ada
+	SUBB R11, R11                           // 4528db or 452adb
+	SUBW (BX), DX                           // 662b13
+	SUBW (R11), DX                          // 66412b13
+	SUBW (BX), R11                          // 66442b1b
+	SUBW (R11), R11                         // 66452b1b
+	SUBL (BX), DX                           // 2b13
+	SUBL (R11), DX                          // 412b13
+	SUBL (BX), R11                          // 442b1b
+	SUBL (R11), R11                         // 452b1b
+	SUBQ (BX), DX                           // 482b13
+	SUBQ (R11), DX                          // 492b13
+	SUBQ (BX), R11                          // 4c2b1b
+	SUBQ (R11), R11                         // 4d2b1b
+	SUBB (BX), DL                           // 2a13
+	SUBB (R11), DL                          // 412a13
+	SUBB (BX), R11                          // 442a1b
+	SUBB (R11), R11                         // 452a1b
+	SUBPD (BX), X2                          // 660f5c13
+	SUBPD (R11), X2                         // 66410f5c13
+	SUBPD X2, X2                            // 660f5cd2
+	SUBPD X11, X2                           // 66410f5cd3
+	SUBPD (BX), X11                         // 66440f5c1b
+	SUBPD (R11), X11                        // 66450f5c1b
+	SUBPD X2, X11                           // 66440f5cda
+	SUBPD X11, X11                          // 66450f5cdb
+	SUBPS (BX), X2                          // 0f5c13
+	SUBPS (R11), X2                         // 410f5c13
+	SUBPS X2, X2                            // 0f5cd2
+	SUBPS X11, X2                           // 410f5cd3
+	SUBPS (BX), X11                         // 440f5c1b
+	SUBPS (R11), X11                        // 450f5c1b
+	SUBPS X2, X11                           // 440f5cda
+	SUBPS X11, X11                          // 450f5cdb
+	SUBSD (BX), X2                          // f20f5c13
+	SUBSD (R11), X2                         // f2410f5c13
+	SUBSD X2, X2                            // f20f5cd2
+	SUBSD X11, X2                           // f2410f5cd3
+	SUBSD (BX), X11                         // f2440f5c1b
+	SUBSD (R11), X11                        // f2450f5c1b
+	SUBSD X2, X11                           // f2440f5cda
+	SUBSD X11, X11                          // f2450f5cdb
+	SUBSS (BX), X2                          // f30f5c13
+	SUBSS (R11), X2                         // f3410f5c13
+	SUBSS X2, X2                            // f30f5cd2
+	SUBSS X11, X2                           // f3410f5cd3
+	SUBSS (BX), X11                         // f3440f5c1b
+	SUBSS (R11), X11                        // f3450f5c1b
+	SUBSS X2, X11                           // f3440f5cda
+	SUBSS X11, X11                          // f3450f5cdb
+	SWAPGS                                  // 0f01f8
+	SYSCALL                                 // 0f05
+	//TODO: SYSENTER                        // 0f34
+	//TODO: SYSEXIT                         // 0f35
+	SYSRET                                  // 0f07
+	TESTB $7, AL                            // a807
+	TESTW $61731, AX                        // 66a923f1
+	TESTL $4045620583, AX                   // a9674523f1
+	TESTQ $-249346713, AX                   // 48a9674523f1
+	TESTW $61731, (BX)                      // 66f70323f1
+	TESTW $61731, (R11)                     // 6641f70323f1
+	TESTW $61731, DX                        // 66f7c223f1
+	TESTW $61731, R11                       // 6641f7c323f1
+	TESTW DX, (BX)                          // 668513
+	TESTW R11, (BX)                         // 6644851b
+	TESTW DX, (R11)                         // 66418513
+	TESTW R11, (R11)                        // 6645851b
+	TESTW DX, DX                            // 6685d2
+	TESTW R11, DX                           // 664485da
+	TESTW DX, R11                           // 664185d3
+	TESTW R11, R11                          // 664585db
+	TESTL $4045620583, (BX)                 // f703674523f1
+	TESTL $4045620583, (R11)                // 41f703674523f1
+	TESTL $4045620583, DX                   // f7c2674523f1
+	TESTL $4045620583, R11                  // 41f7c3674523f1
+	TESTL DX, (BX)                          // 8513
+	TESTL R11, (BX)                         // 44851b
+	TESTL DX, (R11)                         // 418513
+	TESTL R11, (R11)                        // 45851b
+	TESTL DX, DX                            // 85d2
+	TESTL R11, DX                           // 4485da
+	TESTL DX, R11                           // 4185d3
+	TESTL R11, R11                          // 4585db
+	TESTQ $-249346713, (BX)                 // 48f703674523f1
+	TESTQ $-249346713, (R11)                // 49f703674523f1
+	TESTQ $-249346713, DX                   // 48f7c2674523f1
+	TESTQ $-249346713, R11                  // 49f7c3674523f1
+	TESTQ DX, (BX)                          // 488513
+	TESTQ R11, (BX)                         // 4c851b
+	TESTQ DX, (R11)                         // 498513
+	TESTQ R11, (R11)                        // 4d851b
+	TESTQ DX, DX                            // 4885d2
+	TESTQ R11, DX                           // 4c85da
+	TESTQ DX, R11                           // 4985d3
+	TESTQ R11, R11                          // 4d85db
+	TESTB $7, (BX)                          // f60307
+	TESTB $7, (R11)                         // 41f60307
+	TESTB $7, DL                            // f6c207
+	TESTB $7, R11                           // 41f6c307
+	TESTB DL, (BX)                          // 8413
+	TESTB R11, (BX)                         // 44841b
+	TESTB DL, (R11)                         // 418413
+	TESTB R11, (R11)                        // 45841b
+	TESTB DL, DL                            // 84d2
+	TESTB R11, DL                           // 4484da
+	TESTB DL, R11                           // 4184d3
+	TESTB R11, R11                          // 4584db
+	//TODO: TZCNTW (BX), DX                 // 66f30fbc13
+	//TODO: TZCNTW (R11), DX                // 66f3410fbc13
+	//TODO: TZCNTW DX, DX                   // 66f30fbcd2
+	//TODO: TZCNTW R11, DX                  // 66f3410fbcd3
+	//TODO: TZCNTW (BX), R11                // 66f3440fbc1b
+	//TODO: TZCNTW (R11), R11               // 66f3450fbc1b
+	//TODO: TZCNTW DX, R11                  // 66f3440fbcda
+	//TODO: TZCNTW R11, R11                 // 66f3450fbcdb
+	//TODO: TZCNTL (BX), DX                 // f30fbc13
+	//TODO: TZCNTL (R11), DX                // f3410fbc13
+	//TODO: TZCNTL DX, DX                   // f30fbcd2
+	//TODO: TZCNTL R11, DX                  // f3410fbcd3
+	//TODO: TZCNTL (BX), R11                // f3440fbc1b
+	//TODO: TZCNTL (R11), R11               // f3450fbc1b
+	//TODO: TZCNTL DX, R11                  // f3440fbcda
+	//TODO: TZCNTL R11, R11                 // f3450fbcdb
+	//TODO: TZCNTQ (BX), DX                 // f3480fbc13
+	//TODO: TZCNTQ (R11), DX                // f3490fbc13
+	//TODO: TZCNTQ DX, DX                   // f3480fbcd2
+	//TODO: TZCNTQ R11, DX                  // f3490fbcd3
+	//TODO: TZCNTQ (BX), R11                // f34c0fbc1b
+	//TODO: TZCNTQ (R11), R11               // f34d0fbc1b
+	//TODO: TZCNTQ DX, R11                  // f34c0fbcda
+	//TODO: TZCNTQ R11, R11                 // f34d0fbcdb
+	UCOMISD (BX), X2                        // 660f2e13
+	UCOMISD (R11), X2                       // 66410f2e13
+	UCOMISD X2, X2                          // 660f2ed2
+	UCOMISD X11, X2                         // 66410f2ed3
+	UCOMISD (BX), X11                       // 66440f2e1b
+	UCOMISD (R11), X11                      // 66450f2e1b
+	UCOMISD X2, X11                         // 66440f2eda
+	UCOMISD X11, X11                        // 66450f2edb
+	UCOMISS (BX), X2                        // 0f2e13
+	UCOMISS (R11), X2                       // 410f2e13
+	UCOMISS X2, X2                          // 0f2ed2
+	UCOMISS X11, X2                         // 410f2ed3
+	UCOMISS (BX), X11                       // 440f2e1b
+	UCOMISS (R11), X11                      // 450f2e1b
+	UCOMISS X2, X11                         // 440f2eda
+	UCOMISS X11, X11                        // 450f2edb
+	//TODO: UD1                             // 0fb9
+	//TODO: UD2                             // 0f0b
+	UNPCKHPD (BX), X2                       // 660f1513
+	UNPCKHPD (R11), X2                      // 66410f1513
+	UNPCKHPD X2, X2                         // 660f15d2
+	UNPCKHPD X11, X2                        // 66410f15d3
+	UNPCKHPD (BX), X11                      // 66440f151b
+	UNPCKHPD (R11), X11                     // 66450f151b
+	UNPCKHPD X2, X11                        // 66440f15da
+	UNPCKHPD X11, X11                       // 66450f15db
+	UNPCKHPS (BX), X2                       // 0f1513
+	UNPCKHPS (R11), X2                      // 410f1513
+	UNPCKHPS X2, X2                         // 0f15d2
+	UNPCKHPS X11, X2                        // 410f15d3
+	UNPCKHPS (BX), X11                      // 440f151b
+	UNPCKHPS (R11), X11                     // 450f151b
+	UNPCKHPS X2, X11                        // 440f15da
+	UNPCKHPS X11, X11                       // 450f15db
+	UNPCKLPD (BX), X2                       // 660f1413
+	UNPCKLPD (R11), X2                      // 66410f1413
+	UNPCKLPD X2, X2                         // 660f14d2
+	UNPCKLPD X11, X2                        // 66410f14d3
+	UNPCKLPD (BX), X11                      // 66440f141b
+	UNPCKLPD (R11), X11                     // 66450f141b
+	UNPCKLPD X2, X11                        // 66440f14da
+	UNPCKLPD X11, X11                       // 66450f14db
+	UNPCKLPS (BX), X2                       // 0f1413
+	UNPCKLPS (R11), X2                      // 410f1413
+	UNPCKLPS X2, X2                         // 0f14d2
+	UNPCKLPS X11, X2                        // 410f14d3
+	UNPCKLPS (BX), X11                      // 440f141b
+	UNPCKLPS (R11), X11                     // 450f141b
+	UNPCKLPS X2, X11                        // 440f14da
+	UNPCKLPS X11, X11                       // 450f14db
+	//TODO: VADDPD (BX), X9, X2             // c4e1315813 or c5b15813
+	//TODO: VADDPD (R11), X9, X2            // c4c1315813
+	//TODO: VADDPD X2, X9, X2               // c4e13158d2 or c5b158d2
+	//TODO: VADDPD X11, X9, X2              // c4c13158d3
+	//TODO: VADDPD (BX), X9, X11            // c46131581b or c531581b
+	//TODO: VADDPD (R11), X9, X11           // c44131581b
+	//TODO: VADDPD X2, X9, X11              // c4613158da or c53158da
+	//TODO: VADDPD X11, X9, X11             // c4413158db
+	//TODO: VADDPD (BX), Y15, Y2            // c4e1055813 or c5855813
+	//TODO: VADDPD (R11), Y15, Y2           // c4c1055813
+	//TODO: VADDPD Y2, Y15, Y2              // c4e10558d2 or c58558d2
+	//TODO: VADDPD Y11, Y15, Y2             // c4c10558d3
+	//TODO: VADDPD (BX), Y15, Y11           // c46105581b or c505581b
+	//TODO: VADDPD (R11), Y15, Y11          // c44105581b
+	//TODO: VADDPD Y2, Y15, Y11             // c4610558da or c50558da
+	//TODO: VADDPD Y11, Y15, Y11            // c4410558db
+	//TODO: VADDPS (BX), X9, X2             // c4e1305813 or c5b05813
+	//TODO: VADDPS (R11), X9, X2            // c4c1305813
+	//TODO: VADDPS X2, X9, X2               // c4e13058d2 or c5b058d2
+	//TODO: VADDPS X11, X9, X2              // c4c13058d3
+	//TODO: VADDPS (BX), X9, X11            // c46130581b or c530581b
+	//TODO: VADDPS (R11), X9, X11           // c44130581b
+	//TODO: VADDPS X2, X9, X11              // c4613058da or c53058da
+	//TODO: VADDPS X11, X9, X11             // c4413058db
+	//TODO: VADDPS (BX), Y15, Y2            // c4e1045813 or c5845813
+	//TODO: VADDPS (R11), Y15, Y2           // c4c1045813
+	//TODO: VADDPS Y2, Y15, Y2              // c4e10458d2 or c58458d2
+	//TODO: VADDPS Y11, Y15, Y2             // c4c10458d3
+	//TODO: VADDPS (BX), Y15, Y11           // c46104581b or c504581b
+	//TODO: VADDPS (R11), Y15, Y11          // c44104581b
+	//TODO: VADDPS Y2, Y15, Y11             // c4610458da or c50458da
+	//TODO: VADDPS Y11, Y15, Y11            // c4410458db
+	//TODO: VADDSD (BX), X9, X2             // c4e1335813 or c5b35813
+	//TODO: VADDSD (R11), X9, X2            // c4c1335813
+	//TODO: VADDSD X2, X9, X2               // c4e13358d2 or c5b358d2
+	//TODO: VADDSD X11, X9, X2              // c4c13358d3
+	//TODO: VADDSD (BX), X9, X11            // c46133581b or c533581b
+	//TODO: VADDSD (R11), X9, X11           // c44133581b
+	//TODO: VADDSD X2, X9, X11              // c4613358da or c53358da
+	//TODO: VADDSD X11, X9, X11             // c4413358db
+	//TODO: VADDSS (BX), X9, X2             // c4e1325813 or c5b25813
+	//TODO: VADDSS (R11), X9, X2            // c4c1325813
+	//TODO: VADDSS X2, X9, X2               // c4e13258d2 or c5b258d2
+	//TODO: VADDSS X11, X9, X2              // c4c13258d3
+	//TODO: VADDSS (BX), X9, X11            // c46132581b or c532581b
+	//TODO: VADDSS (R11), X9, X11           // c44132581b
+	//TODO: VADDSS X2, X9, X11              // c4613258da or c53258da
+	//TODO: VADDSS X11, X9, X11             // c4413258db
+	//TODO: VADDSUBPD (BX), X9, X2          // c4e131d013 or c5b1d013
+	//TODO: VADDSUBPD (R11), X9, X2         // c4c131d013
+	//TODO: VADDSUBPD X2, X9, X2            // c4e131d0d2 or c5b1d0d2
+	//TODO: VADDSUBPD X11, X9, X2           // c4c131d0d3
+	//TODO: VADDSUBPD (BX), X9, X11         // c46131d01b or c531d01b
+	//TODO: VADDSUBPD (R11), X9, X11        // c44131d01b
+	//TODO: VADDSUBPD X2, X9, X11           // c46131d0da or c531d0da
+	//TODO: VADDSUBPD X11, X9, X11          // c44131d0db
+	//TODO: VADDSUBPD (BX), Y15, Y2         // c4e105d013 or c585d013
+	//TODO: VADDSUBPD (R11), Y15, Y2        // c4c105d013
+	//TODO: VADDSUBPD Y2, Y15, Y2           // c4e105d0d2 or c585d0d2
+	//TODO: VADDSUBPD Y11, Y15, Y2          // c4c105d0d3
+	//TODO: VADDSUBPD (BX), Y15, Y11        // c46105d01b or c505d01b
+	//TODO: VADDSUBPD (R11), Y15, Y11       // c44105d01b
+	//TODO: VADDSUBPD Y2, Y15, Y11          // c46105d0da or c505d0da
+	//TODO: VADDSUBPD Y11, Y15, Y11         // c44105d0db
+	//TODO: VADDSUBPS (BX), X9, X2          // c4e133d013 or c5b3d013
+	//TODO: VADDSUBPS (R11), X9, X2         // c4c133d013
+	//TODO: VADDSUBPS X2, X9, X2            // c4e133d0d2 or c5b3d0d2
+	//TODO: VADDSUBPS X11, X9, X2           // c4c133d0d3
+	//TODO: VADDSUBPS (BX), X9, X11         // c46133d01b or c533d01b
+	//TODO: VADDSUBPS (R11), X9, X11        // c44133d01b
+	//TODO: VADDSUBPS X2, X9, X11           // c46133d0da or c533d0da
+	//TODO: VADDSUBPS X11, X9, X11          // c44133d0db
+	//TODO: VADDSUBPS (BX), Y15, Y2         // c4e107d013 or c587d013
+	//TODO: VADDSUBPS (R11), Y15, Y2        // c4c107d013
+	//TODO: VADDSUBPS Y2, Y15, Y2           // c4e107d0d2 or c587d0d2
+	//TODO: VADDSUBPS Y11, Y15, Y2          // c4c107d0d3
+	//TODO: VADDSUBPS (BX), Y15, Y11        // c46107d01b or c507d01b
+	//TODO: VADDSUBPS (R11), Y15, Y11       // c44107d01b
+	//TODO: VADDSUBPS Y2, Y15, Y11          // c46107d0da or c507d0da
+	//TODO: VADDSUBPS Y11, Y15, Y11         // c44107d0db
+	//TODO: VAESDEC (BX), X9, X2            // c4e231de13
+	//TODO: VAESDEC (R11), X9, X2           // c4c231de13
+	//TODO: VAESDEC X2, X9, X2              // c4e231ded2
+	//TODO: VAESDEC X11, X9, X2             // c4c231ded3
+	//TODO: VAESDEC (BX), X9, X11           // c46231de1b
+	//TODO: VAESDEC (R11), X9, X11          // c44231de1b
+	//TODO: VAESDEC X2, X9, X11             // c46231deda
+	//TODO: VAESDEC X11, X9, X11            // c44231dedb
+	//TODO: VAESDECLAST (BX), X9, X2        // c4e231df13
+	//TODO: VAESDECLAST (R11), X9, X2       // c4c231df13
+	//TODO: VAESDECLAST X2, X9, X2          // c4e231dfd2
+	//TODO: VAESDECLAST X11, X9, X2         // c4c231dfd3
+	//TODO: VAESDECLAST (BX), X9, X11       // c46231df1b
+	//TODO: VAESDECLAST (R11), X9, X11      // c44231df1b
+	//TODO: VAESDECLAST X2, X9, X11         // c46231dfda
+	//TODO: VAESDECLAST X11, X9, X11        // c44231dfdb
+	//TODO: VAESENC (BX), X9, X2            // c4e231dc13
+	//TODO: VAESENC (R11), X9, X2           // c4c231dc13
+	//TODO: VAESENC X2, X9, X2              // c4e231dcd2
+	//TODO: VAESENC X11, X9, X2             // c4c231dcd3
+	//TODO: VAESENC (BX), X9, X11           // c46231dc1b
+	//TODO: VAESENC (R11), X9, X11          // c44231dc1b
+	//TODO: VAESENC X2, X9, X11             // c46231dcda
+	//TODO: VAESENC X11, X9, X11            // c44231dcdb
+	//TODO: VAESENCLAST (BX), X9, X2        // c4e231dd13
+	//TODO: VAESENCLAST (R11), X9, X2       // c4c231dd13
+	//TODO: VAESENCLAST X2, X9, X2          // c4e231ddd2
+	//TODO: VAESENCLAST X11, X9, X2         // c4c231ddd3
+	//TODO: VAESENCLAST (BX), X9, X11       // c46231dd1b
+	//TODO: VAESENCLAST (R11), X9, X11      // c44231dd1b
+	//TODO: VAESENCLAST X2, X9, X11         // c46231ddda
+	//TODO: VAESENCLAST X11, X9, X11        // c44231dddb
+	//TODO: VAESIMC (BX), X2                // c4e279db13
+	//TODO: VAESIMC (R11), X2               // c4c279db13
+	//TODO: VAESIMC X2, X2                  // c4e279dbd2
+	//TODO: VAESIMC X11, X2                 // c4c279dbd3
+	//TODO: VAESIMC (BX), X11               // c46279db1b
+	//TODO: VAESIMC (R11), X11              // c44279db1b
+	//TODO: VAESIMC X2, X11                 // c46279dbda
+	//TODO: VAESIMC X11, X11                // c44279dbdb
+	//TODO: VAESKEYGENASSIST $7, (BX), X2   // c4e379df1307
+	//TODO: VAESKEYGENASSIST $7, (R11), X2  // c4c379df1307
+	//TODO: VAESKEYGENASSIST $7, X2, X2     // c4e379dfd207
+	//TODO: VAESKEYGENASSIST $7, X11, X2    // c4c379dfd307
+	//TODO: VAESKEYGENASSIST $7, (BX), X11  // c46379df1b07
+	//TODO: VAESKEYGENASSIST $7, (R11), X11 // c44379df1b07
+	//TODO: VAESKEYGENASSIST $7, X2, X11    // c46379dfda07
+	//TODO: VAESKEYGENASSIST $7, X11, X11   // c44379dfdb07
+	//TODO: VANDNPD (BX), X9, X2            // c4e1315513 or c5b15513
+	//TODO: VANDNPD (R11), X9, X2           // c4c1315513
+	//TODO: VANDNPD X2, X9, X2              // c4e13155d2 or c5b155d2
+	//TODO: VANDNPD X11, X9, X2             // c4c13155d3
+	//TODO: VANDNPD (BX), X9, X11           // c46131551b or c531551b
+	//TODO: VANDNPD (R11), X9, X11          // c44131551b
+	//TODO: VANDNPD X2, X9, X11             // c4613155da or c53155da
+	//TODO: VANDNPD X11, X9, X11            // c4413155db
+	//TODO: VANDNPD (BX), Y15, Y2           // c4e1055513 or c5855513
+	//TODO: VANDNPD (R11), Y15, Y2          // c4c1055513
+	//TODO: VANDNPD Y2, Y15, Y2             // c4e10555d2 or c58555d2
+	//TODO: VANDNPD Y11, Y15, Y2            // c4c10555d3
+	//TODO: VANDNPD (BX), Y15, Y11          // c46105551b or c505551b
+	//TODO: VANDNPD (R11), Y15, Y11         // c44105551b
+	//TODO: VANDNPD Y2, Y15, Y11            // c4610555da or c50555da
+	//TODO: VANDNPD Y11, Y15, Y11           // c4410555db
+	//TODO: VANDNPS (BX), X9, X2            // c4e1305513 or c5b05513
+	//TODO: VANDNPS (R11), X9, X2           // c4c1305513
+	//TODO: VANDNPS X2, X9, X2              // c4e13055d2 or c5b055d2
+	//TODO: VANDNPS X11, X9, X2             // c4c13055d3
+	//TODO: VANDNPS (BX), X9, X11           // c46130551b or c530551b
+	//TODO: VANDNPS (R11), X9, X11          // c44130551b
+	//TODO: VANDNPS X2, X9, X11             // c4613055da or c53055da
+	//TODO: VANDNPS X11, X9, X11            // c4413055db
+	//TODO: VANDNPS (BX), Y15, Y2           // c4e1045513 or c5845513
+	//TODO: VANDNPS (R11), Y15, Y2          // c4c1045513
+	//TODO: VANDNPS Y2, Y15, Y2             // c4e10455d2 or c58455d2
+	//TODO: VANDNPS Y11, Y15, Y2            // c4c10455d3
+	//TODO: VANDNPS (BX), Y15, Y11          // c46104551b or c504551b
+	//TODO: VANDNPS (R11), Y15, Y11         // c44104551b
+	//TODO: VANDNPS Y2, Y15, Y11            // c4610455da or c50455da
+	//TODO: VANDNPS Y11, Y15, Y11           // c4410455db
+	//TODO: VANDPD (BX), X9, X2             // c4e1315413 or c5b15413
+	//TODO: VANDPD (R11), X9, X2            // c4c1315413
+	//TODO: VANDPD X2, X9, X2               // c4e13154d2 or c5b154d2
+	//TODO: VANDPD X11, X9, X2              // c4c13154d3
+	//TODO: VANDPD (BX), X9, X11            // c46131541b or c531541b
+	//TODO: VANDPD (R11), X9, X11           // c44131541b
+	//TODO: VANDPD X2, X9, X11              // c4613154da or c53154da
+	//TODO: VANDPD X11, X9, X11             // c4413154db
+	//TODO: VANDPD (BX), Y15, Y2            // c4e1055413 or c5855413
+	//TODO: VANDPD (R11), Y15, Y2           // c4c1055413
+	//TODO: VANDPD Y2, Y15, Y2              // c4e10554d2 or c58554d2
+	//TODO: VANDPD Y11, Y15, Y2             // c4c10554d3
+	//TODO: VANDPD (BX), Y15, Y11           // c46105541b or c505541b
+	//TODO: VANDPD (R11), Y15, Y11          // c44105541b
+	//TODO: VANDPD Y2, Y15, Y11             // c4610554da or c50554da
+	//TODO: VANDPD Y11, Y15, Y11            // c4410554db
+	//TODO: VANDPS (BX), X9, X2             // c4e1305413 or c5b05413
+	//TODO: VANDPS (R11), X9, X2            // c4c1305413
+	//TODO: VANDPS X2, X9, X2               // c4e13054d2 or c5b054d2
+	//TODO: VANDPS X11, X9, X2              // c4c13054d3
+	//TODO: VANDPS (BX), X9, X11            // c46130541b or c530541b
+	//TODO: VANDPS (R11), X9, X11           // c44130541b
+	//TODO: VANDPS X2, X9, X11              // c4613054da or c53054da
+	//TODO: VANDPS X11, X9, X11             // c4413054db
+	//TODO: VANDPS (BX), Y15, Y2            // c4e1045413 or c5845413
+	//TODO: VANDPS (R11), Y15, Y2           // c4c1045413
+	//TODO: VANDPS Y2, Y15, Y2              // c4e10454d2 or c58454d2
+	//TODO: VANDPS Y11, Y15, Y2             // c4c10454d3
+	//TODO: VANDPS (BX), Y15, Y11           // c46104541b or c504541b
+	//TODO: VANDPS (R11), Y15, Y11          // c44104541b
+	//TODO: VANDPS Y2, Y15, Y11             // c4610454da or c50454da
+	//TODO: VANDPS Y11, Y15, Y11            // c4410454db
+	//TODO: VBLENDPD $7, (BX), X9, X2       // c4e3310d1307
+	//TODO: VBLENDPD $7, (R11), X9, X2      // c4c3310d1307
+	//TODO: VBLENDPD $7, X2, X9, X2         // c4e3310dd207
+	//TODO: VBLENDPD $7, X11, X9, X2        // c4c3310dd307
+	//TODO: VBLENDPD $7, (BX), X9, X11      // c463310d1b07
+	//TODO: VBLENDPD $7, (R11), X9, X11     // c443310d1b07
+	//TODO: VBLENDPD $7, X2, X9, X11        // c463310dda07
+	//TODO: VBLENDPD $7, X11, X9, X11       // c443310ddb07
+	//TODO: VBLENDPD $7, (BX), Y15, Y2      // c4e3050d1307
+	//TODO: VBLENDPD $7, (R11), Y15, Y2     // c4c3050d1307
+	//TODO: VBLENDPD $7, Y2, Y15, Y2        // c4e3050dd207
+	//TODO: VBLENDPD $7, Y11, Y15, Y2       // c4c3050dd307
+	//TODO: VBLENDPD $7, (BX), Y15, Y11     // c463050d1b07
+	//TODO: VBLENDPD $7, (R11), Y15, Y11    // c443050d1b07
+	//TODO: VBLENDPD $7, Y2, Y15, Y11       // c463050dda07
+	//TODO: VBLENDPD $7, Y11, Y15, Y11      // c443050ddb07
+	//TODO: VBLENDPS $7, (BX), X9, X2       // c4e3310c1307
+	//TODO: VBLENDPS $7, (R11), X9, X2      // c4c3310c1307
+	//TODO: VBLENDPS $7, X2, X9, X2         // c4e3310cd207
+	//TODO: VBLENDPS $7, X11, X9, X2        // c4c3310cd307
+	//TODO: VBLENDPS $7, (BX), X9, X11      // c463310c1b07
+	//TODO: VBLENDPS $7, (R11), X9, X11     // c443310c1b07
+	//TODO: VBLENDPS $7, X2, X9, X11        // c463310cda07
+	//TODO: VBLENDPS $7, X11, X9, X11       // c443310cdb07
+	//TODO: VBLENDPS $7, (BX), Y15, Y2      // c4e3050c1307
+	//TODO: VBLENDPS $7, (R11), Y15, Y2     // c4c3050c1307
+	//TODO: VBLENDPS $7, Y2, Y15, Y2        // c4e3050cd207
+	//TODO: VBLENDPS $7, Y11, Y15, Y2       // c4c3050cd307
+	//TODO: VBLENDPS $7, (BX), Y15, Y11     // c463050c1b07
+	//TODO: VBLENDPS $7, (R11), Y15, Y11    // c443050c1b07
+	//TODO: VBLENDPS $7, Y2, Y15, Y11       // c463050cda07
+	//TODO: VBLENDPS $7, Y11, Y15, Y11      // c443050cdb07
+	//TODO: VBLENDVPD XMM12, (BX), X9, X2   // c4e3314b13c0
+	//TODO: VBLENDVPD XMM12, (R11), X9, X2  // c4c3314b13c0
+	//TODO: VBLENDVPD XMM12, X2, X9, X2     // c4e3314bd2c0
+	//TODO: VBLENDVPD XMM12, X11, X9, X2    // c4c3314bd3c0
+	//TODO: VBLENDVPD XMM12, (BX), X9, X11  // c463314b1bc0
+	//TODO: VBLENDVPD XMM12, (R11), X9, X11 // c443314b1bc0
+	//TODO: VBLENDVPD XMM12, X2, X9, X11    // c463314bdac0
+	//TODO: VBLENDVPD XMM12, X11, X9, X11   // c443314bdbc0
+	//TODO: VBLENDVPD YMM13, (BX), Y15, Y2  // c4e3054b13d0
+	//TODO: VBLENDVPD YMM13, (R11), Y15, Y2 // c4c3054b13d0
+	//TODO: VBLENDVPD YMM13, Y2, Y15, Y2    // c4e3054bd2d0
+	//TODO: VBLENDVPD YMM13, Y11, Y15, Y2   // c4c3054bd3d0
+	//TODO: VBLENDVPD YMM13, (BX), Y15, Y11 // c463054b1bd0
+	//TODO: VBLENDVPD YMM13, (R11), Y15, Y11 // c443054b1bd0
+	//TODO: VBLENDVPD YMM13, Y2, Y15, Y11   // c463054bdad0
+	//TODO: VBLENDVPD YMM13, Y11, Y15, Y11  // c443054bdbd0
+	//TODO: VBLENDVPS XMM12, (BX), X9, X2   // c4e3314a13c0
+	//TODO: VBLENDVPS XMM12, (R11), X9, X2  // c4c3314a13c0
+	//TODO: VBLENDVPS XMM12, X2, X9, X2     // c4e3314ad2c0
+	//TODO: VBLENDVPS XMM12, X11, X9, X2    // c4c3314ad3c0
+	//TODO: VBLENDVPS XMM12, (BX), X9, X11  // c463314a1bc0
+	//TODO: VBLENDVPS XMM12, (R11), X9, X11 // c443314a1bc0
+	//TODO: VBLENDVPS XMM12, X2, X9, X11    // c463314adac0
+	//TODO: VBLENDVPS XMM12, X11, X9, X11   // c443314adbc0
+	//TODO: VBLENDVPS YMM13, (BX), Y15, Y2  // c4e3054a13d0
+	//TODO: VBLENDVPS YMM13, (R11), Y15, Y2 // c4c3054a13d0
+	//TODO: VBLENDVPS YMM13, Y2, Y15, Y2    // c4e3054ad2d0
+	//TODO: VBLENDVPS YMM13, Y11, Y15, Y2   // c4c3054ad3d0
+	//TODO: VBLENDVPS YMM13, (BX), Y15, Y11 // c463054a1bd0
+	//TODO: VBLENDVPS YMM13, (R11), Y15, Y11 // c443054a1bd0
+	//TODO: VBLENDVPS YMM13, Y2, Y15, Y11   // c463054adad0
+	//TODO: VBLENDVPS YMM13, Y11, Y15, Y11  // c443054adbd0
+	//TODO: VBROADCASTF128 (BX), Y2         // c4e27d1a13
+	//TODO: VBROADCASTF128 (R11), Y2        // c4c27d1a13
+	//TODO: VBROADCASTF128 (BX), Y11        // c4627d1a1b
+	//TODO: VBROADCASTF128 (R11), Y11       // c4427d1a1b
+	//TODO: VBROADCASTI128 (BX), Y2         // c4e27d5a13
+	//TODO: VBROADCASTI128 (R11), Y2        // c4c27d5a13
+	//TODO: VBROADCASTI128 (BX), Y11        // c4627d5a1b
+	//TODO: VBROADCASTI128 (R11), Y11       // c4427d5a1b
+	//TODO: VBROADCASTSD (BX), Y2           // c4e27d1913
+	//TODO: VBROADCASTSD (R11), Y2          // c4c27d1913
+	//TODO: VBROADCASTSD (BX), Y11          // c4627d191b
+	//TODO: VBROADCASTSD (R11), Y11         // c4427d191b
+	//TODO: VBROADCASTSD X2, Y2             // c4e27d19d2
+	//TODO: VBROADCASTSD X11, Y2            // c4c27d19d3
+	//TODO: VBROADCASTSD X2, Y11            // c4627d19da
+	//TODO: VBROADCASTSD X11, Y11           // c4427d19db
+	//TODO: VBROADCASTSS (BX), X2           // c4e2791813
+	//TODO: VBROADCASTSS (R11), X2          // c4c2791813
+	//TODO: VBROADCASTSS (BX), X11          // c46279181b
+	//TODO: VBROADCASTSS (R11), X11         // c44279181b
+	//TODO: VBROADCASTSS X2, X2             // c4e27918d2
+	//TODO: VBROADCASTSS X11, X2            // c4c27918d3
+	//TODO: VBROADCASTSS X2, X11            // c4627918da
+	//TODO: VBROADCASTSS X11, X11           // c4427918db
+	//TODO: VBROADCASTSS (BX), Y2           // c4e27d1813
+	//TODO: VBROADCASTSS (R11), Y2          // c4c27d1813
+	//TODO: VBROADCASTSS (BX), Y11          // c4627d181b
+	//TODO: VBROADCASTSS (R11), Y11         // c4427d181b
+	//TODO: VBROADCASTSS X2, Y2             // c4e27d18d2
+	//TODO: VBROADCASTSS X11, Y2            // c4c27d18d3
+	//TODO: VBROADCASTSS X2, Y11            // c4627d18da
+	//TODO: VBROADCASTSS X11, Y11           // c4427d18db
+	//TODO: VCMPPD $7, (BX), X9, X2         // c4e131c21307 or c5b1c21307
+	//TODO: VCMPPD $7, (R11), X9, X2        // c4c131c21307
+	//TODO: VCMPPD $7, X2, X9, X2           // c4e131c2d207 or c5b1c2d207
+	//TODO: VCMPPD $7, X11, X9, X2          // c4c131c2d307
+	//TODO: VCMPPD $7, (BX), X9, X11        // c46131c21b07 or c531c21b07
+	//TODO: VCMPPD $7, (R11), X9, X11       // c44131c21b07
+	//TODO: VCMPPD $7, X2, X9, X11          // c46131c2da07 or c531c2da07
+	//TODO: VCMPPD $7, X11, X9, X11         // c44131c2db07
+	//TODO: VCMPPD $7, (BX), Y15, Y2        // c4e105c21307 or c585c21307
+	//TODO: VCMPPD $7, (R11), Y15, Y2       // c4c105c21307
+	//TODO: VCMPPD $7, Y2, Y15, Y2          // c4e105c2d207 or c585c2d207
+	//TODO: VCMPPD $7, Y11, Y15, Y2         // c4c105c2d307
+	//TODO: VCMPPD $7, (BX), Y15, Y11       // c46105c21b07 or c505c21b07
+	//TODO: VCMPPD $7, (R11), Y15, Y11      // c44105c21b07
+	//TODO: VCMPPD $7, Y2, Y15, Y11         // c46105c2da07 or c505c2da07
+	//TODO: VCMPPD $7, Y11, Y15, Y11        // c44105c2db07
+	//TODO: VCMPPS $7, (BX), X9, X2         // c4e130c21307 or c5b0c21307
+	//TODO: VCMPPS $7, (R11), X9, X2        // c4c130c21307
+	//TODO: VCMPPS $7, X2, X9, X2           // c4e130c2d207 or c5b0c2d207
+	//TODO: VCMPPS $7, X11, X9, X2          // c4c130c2d307
+	//TODO: VCMPPS $7, (BX), X9, X11        // c46130c21b07 or c530c21b07
+	//TODO: VCMPPS $7, (R11), X9, X11       // c44130c21b07
+	//TODO: VCMPPS $7, X2, X9, X11          // c46130c2da07 or c530c2da07
+	//TODO: VCMPPS $7, X11, X9, X11         // c44130c2db07
+	//TODO: VCMPPS $7, (BX), Y15, Y2        // c4e104c21307 or c584c21307
+	//TODO: VCMPPS $7, (R11), Y15, Y2       // c4c104c21307
+	//TODO: VCMPPS $7, Y2, Y15, Y2          // c4e104c2d207 or c584c2d207
+	//TODO: VCMPPS $7, Y11, Y15, Y2         // c4c104c2d307
+	//TODO: VCMPPS $7, (BX), Y15, Y11       // c46104c21b07 or c504c21b07
+	//TODO: VCMPPS $7, (R11), Y15, Y11      // c44104c21b07
+	//TODO: VCMPPS $7, Y2, Y15, Y11         // c46104c2da07 or c504c2da07
+	//TODO: VCMPPS $7, Y11, Y15, Y11        // c44104c2db07
+	//TODO: VCMPSD $7, (BX), X9, X2         // c4e133c21307 or c5b3c21307
+	//TODO: VCMPSD $7, (R11), X9, X2        // c4c133c21307
+	//TODO: VCMPSD $7, X2, X9, X2           // c4e133c2d207 or c5b3c2d207
+	//TODO: VCMPSD $7, X11, X9, X2          // c4c133c2d307
+	//TODO: VCMPSD $7, (BX), X9, X11        // c46133c21b07 or c533c21b07
+	//TODO: VCMPSD $7, (R11), X9, X11       // c44133c21b07
+	//TODO: VCMPSD $7, X2, X9, X11          // c46133c2da07 or c533c2da07
+	//TODO: VCMPSD $7, X11, X9, X11         // c44133c2db07
+	//TODO: VCMPSS $7, (BX), X9, X2         // c4e132c21307 or c5b2c21307
+	//TODO: VCMPSS $7, (R11), X9, X2        // c4c132c21307
+	//TODO: VCMPSS $7, X2, X9, X2           // c4e132c2d207 or c5b2c2d207
+	//TODO: VCMPSS $7, X11, X9, X2          // c4c132c2d307
+	//TODO: VCMPSS $7, (BX), X9, X11        // c46132c21b07 or c532c21b07
+	//TODO: VCMPSS $7, (R11), X9, X11       // c44132c21b07
+	//TODO: VCMPSS $7, X2, X9, X11          // c46132c2da07 or c532c2da07
+	//TODO: VCMPSS $7, X11, X9, X11         // c44132c2db07
+	//TODO: VCOMISD (BX), X2                // c4e1792f13 or c5f92f13
+	//TODO: VCOMISD (R11), X2               // c4c1792f13
+	//TODO: VCOMISD X2, X2                  // c4e1792fd2 or c5f92fd2
+	//TODO: VCOMISD X11, X2                 // c4c1792fd3
+	//TODO: VCOMISD (BX), X11               // c461792f1b or c5792f1b
+	//TODO: VCOMISD (R11), X11              // c441792f1b
+	//TODO: VCOMISD X2, X11                 // c461792fda or c5792fda
+	//TODO: VCOMISD X11, X11                // c441792fdb
+	//TODO: VCOMISS (BX), X2                // c4e1782f13 or c5f82f13
+	//TODO: VCOMISS (R11), X2               // c4c1782f13
+	//TODO: VCOMISS X2, X2                  // c4e1782fd2 or c5f82fd2
+	//TODO: VCOMISS X11, X2                 // c4c1782fd3
+	//TODO: VCOMISS (BX), X11               // c461782f1b or c5782f1b
+	//TODO: VCOMISS (R11), X11              // c441782f1b
+	//TODO: VCOMISS X2, X11                 // c461782fda or c5782fda
+	//TODO: VCOMISS X11, X11                // c441782fdb
+	//TODO: VCVTDQ2PD (BX), X2              // c4e17ae613 or c5fae613
+	//TODO: VCVTDQ2PD (R11), X2             // c4c17ae613
+	//TODO: VCVTDQ2PD X2, X2                // c4e17ae6d2 or c5fae6d2
+	//TODO: VCVTDQ2PD X11, X2               // c4c17ae6d3
+	//TODO: VCVTDQ2PD (BX), X11             // c4617ae61b or c57ae61b
+	//TODO: VCVTDQ2PD (R11), X11            // c4417ae61b
+	//TODO: VCVTDQ2PD X2, X11               // c4617ae6da or c57ae6da
+	//TODO: VCVTDQ2PD X11, X11              // c4417ae6db
+	//TODO: VCVTDQ2PD (BX), Y2              // c4e17ee613 or c5fee613
+	//TODO: VCVTDQ2PD (R11), Y2             // c4c17ee613
+	//TODO: VCVTDQ2PD X2, Y2                // c4e17ee6d2 or c5fee6d2
+	//TODO: VCVTDQ2PD X11, Y2               // c4c17ee6d3
+	//TODO: VCVTDQ2PD (BX), Y11             // c4617ee61b or c57ee61b
+	//TODO: VCVTDQ2PD (R11), Y11            // c4417ee61b
+	//TODO: VCVTDQ2PD X2, Y11               // c4617ee6da or c57ee6da
+	//TODO: VCVTDQ2PD X11, Y11              // c4417ee6db
+	//TODO: VCVTDQ2PS (BX), X2              // c4e1785b13 or c5f85b13
+	//TODO: VCVTDQ2PS (R11), X2             // c4c1785b13
+	//TODO: VCVTDQ2PS X2, X2                // c4e1785bd2 or c5f85bd2
+	//TODO: VCVTDQ2PS X11, X2               // c4c1785bd3
+	//TODO: VCVTDQ2PS (BX), X11             // c461785b1b or c5785b1b
+	//TODO: VCVTDQ2PS (R11), X11            // c441785b1b
+	//TODO: VCVTDQ2PS X2, X11               // c461785bda or c5785bda
+	//TODO: VCVTDQ2PS X11, X11              // c441785bdb
+	//TODO: VCVTDQ2PS (BX), Y2              // c4e17c5b13 or c5fc5b13
+	//TODO: VCVTDQ2PS (R11), Y2             // c4c17c5b13
+	//TODO: VCVTDQ2PS Y2, Y2                // c4e17c5bd2 or c5fc5bd2
+	//TODO: VCVTDQ2PS Y11, Y2               // c4c17c5bd3
+	//TODO: VCVTDQ2PS (BX), Y11             // c4617c5b1b or c57c5b1b
+	//TODO: VCVTDQ2PS (R11), Y11            // c4417c5b1b
+	//TODO: VCVTDQ2PS Y2, Y11               // c4617c5bda or c57c5bda
+	//TODO: VCVTDQ2PS Y11, Y11              // c4417c5bdb
+	//TODO: VCVTPD2DQX (BX), X2             // c4e17be613 or c5fbe613
+	//TODO: VCVTPD2DQX (R11), X2            // c4c17be613
+	//TODO: VCVTPD2DQX X2, X2               // c4e17be6d2 or c5fbe6d2
+	//TODO: VCVTPD2DQX X11, X2              // c4c17be6d3
+	//TODO: VCVTPD2DQX (BX), X11            // c4617be61b or c57be61b
+	//TODO: VCVTPD2DQX (R11), X11           // c4417be61b
+	//TODO: VCVTPD2DQX X2, X11              // c4617be6da or c57be6da
+	//TODO: VCVTPD2DQX X11, X11             // c4417be6db
+	//TODO: VCVTPD2DQY (BX), X2             // c4e17fe613 or c5ffe613
+	//TODO: VCVTPD2DQY (R11), X2            // c4c17fe613
+	//TODO: VCVTPD2DQY Y2, X2               // c4e17fe6d2 or c5ffe6d2
+	//TODO: VCVTPD2DQY Y11, X2              // c4c17fe6d3
+	//TODO: VCVTPD2DQY (BX), X11            // c4617fe61b or c57fe61b
+	//TODO: VCVTPD2DQY (R11), X11           // c4417fe61b
+	//TODO: VCVTPD2DQY Y2, X11              // c4617fe6da or c57fe6da
+	//TODO: VCVTPD2DQY Y11, X11             // c4417fe6db
+	//TODO: VCVTPD2PSX (BX), X2             // c4e1795a13 or c5f95a13
+	//TODO: VCVTPD2PSX (R11), X2            // c4c1795a13
+	//TODO: VCVTPD2PSX X2, X2               // c4e1795ad2 or c5f95ad2
+	//TODO: VCVTPD2PSX X11, X2              // c4c1795ad3
+	//TODO: VCVTPD2PSX (BX), X11            // c461795a1b or c5795a1b
+	//TODO: VCVTPD2PSX (R11), X11           // c441795a1b
+	//TODO: VCVTPD2PSX X2, X11              // c461795ada or c5795ada
+	//TODO: VCVTPD2PSX X11, X11             // c441795adb
+	//TODO: VCVTPD2PSY (BX), X2             // c4e17d5a13 or c5fd5a13
+	//TODO: VCVTPD2PSY (R11), X2            // c4c17d5a13
+	//TODO: VCVTPD2PSY Y2, X2               // c4e17d5ad2 or c5fd5ad2
+	//TODO: VCVTPD2PSY Y11, X2              // c4c17d5ad3
+	//TODO: VCVTPD2PSY (BX), X11            // c4617d5a1b or c57d5a1b
+	//TODO: VCVTPD2PSY (R11), X11           // c4417d5a1b
+	//TODO: VCVTPD2PSY Y2, X11              // c4617d5ada or c57d5ada
+	//TODO: VCVTPD2PSY Y11, X11             // c4417d5adb
+	//TODO: VCVTPH2PS (BX), X2              // c4e2791313
+	//TODO: VCVTPH2PS (R11), X2             // c4c2791313
+	//TODO: VCVTPH2PS X2, X2                // c4e27913d2
+	//TODO: VCVTPH2PS X11, X2               // c4c27913d3
+	//TODO: VCVTPH2PS (BX), X11             // c46279131b
+	//TODO: VCVTPH2PS (R11), X11            // c44279131b
+	//TODO: VCVTPH2PS X2, X11               // c4627913da
+	//TODO: VCVTPH2PS X11, X11              // c4427913db
+	//TODO: VCVTPH2PS (BX), Y2              // c4e27d1313
+	//TODO: VCVTPH2PS (R11), Y2             // c4c27d1313
+	//TODO: VCVTPH2PS X2, Y2                // c4e27d13d2
+	//TODO: VCVTPH2PS X11, Y2               // c4c27d13d3
+	//TODO: VCVTPH2PS (BX), Y11             // c4627d131b
+	//TODO: VCVTPH2PS (R11), Y11            // c4427d131b
+	//TODO: VCVTPH2PS X2, Y11               // c4627d13da
+	//TODO: VCVTPH2PS X11, Y11              // c4427d13db
+	//TODO: VCVTPS2DQ (BX), X2              // c4e1795b13 or c5f95b13
+	//TODO: VCVTPS2DQ (R11), X2             // c4c1795b13
+	//TODO: VCVTPS2DQ X2, X2                // c4e1795bd2 or c5f95bd2
+	//TODO: VCVTPS2DQ X11, X2               // c4c1795bd3
+	//TODO: VCVTPS2DQ (BX), X11             // c461795b1b or c5795b1b
+	//TODO: VCVTPS2DQ (R11), X11            // c441795b1b
+	//TODO: VCVTPS2DQ X2, X11               // c461795bda or c5795bda
+	//TODO: VCVTPS2DQ X11, X11              // c441795bdb
+	//TODO: VCVTPS2DQ (BX), Y2              // c4e17d5b13 or c5fd5b13
+	//TODO: VCVTPS2DQ (R11), Y2             // c4c17d5b13
+	//TODO: VCVTPS2DQ Y2, Y2                // c4e17d5bd2 or c5fd5bd2
+	//TODO: VCVTPS2DQ Y11, Y2               // c4c17d5bd3
+	//TODO: VCVTPS2DQ (BX), Y11             // c4617d5b1b or c57d5b1b
+	//TODO: VCVTPS2DQ (R11), Y11            // c4417d5b1b
+	//TODO: VCVTPS2DQ Y2, Y11               // c4617d5bda or c57d5bda
+	//TODO: VCVTPS2DQ Y11, Y11              // c4417d5bdb
+	//TODO: VCVTPS2PD (BX), X2              // c4e1785a13 or c5f85a13
+	//TODO: VCVTPS2PD (R11), X2             // c4c1785a13
+	//TODO: VCVTPS2PD X2, X2                // c4e1785ad2 or c5f85ad2
+	//TODO: VCVTPS2PD X11, X2               // c4c1785ad3
+	//TODO: VCVTPS2PD (BX), X11             // c461785a1b or c5785a1b
+	//TODO: VCVTPS2PD (R11), X11            // c441785a1b
+	//TODO: VCVTPS2PD X2, X11               // c461785ada or c5785ada
+	//TODO: VCVTPS2PD X11, X11              // c441785adb
+	//TODO: VCVTPS2PD (BX), Y2              // c4e17c5a13 or c5fc5a13
+	//TODO: VCVTPS2PD (R11), Y2             // c4c17c5a13
+	//TODO: VCVTPS2PD X2, Y2                // c4e17c5ad2 or c5fc5ad2
+	//TODO: VCVTPS2PD X11, Y2               // c4c17c5ad3
+	//TODO: VCVTPS2PD (BX), Y11             // c4617c5a1b or c57c5a1b
+	//TODO: VCVTPS2PD (R11), Y11            // c4417c5a1b
+	//TODO: VCVTPS2PD X2, Y11               // c4617c5ada or c57c5ada
+	//TODO: VCVTPS2PD X11, Y11              // c4417c5adb
+	//TODO: VCVTPS2PH $7, Y2, (BX)          // c4e37d1d1307
+	//TODO: VCVTPS2PH $7, Y11, (BX)         // c4637d1d1b07
+	//TODO: VCVTPS2PH $7, Y2, (R11)         // c4c37d1d1307
+	//TODO: VCVTPS2PH $7, Y11, (R11)        // c4437d1d1b07
+	//TODO: VCVTPS2PH $7, Y2, X2            // c4e37d1dd207
+	//TODO: VCVTPS2PH $7, Y11, X2           // c4637d1dda07
+	//TODO: VCVTPS2PH $7, Y2, X11           // c4c37d1dd307
+	//TODO: VCVTPS2PH $7, Y11, X11          // c4437d1ddb07
+	//TODO: VCVTPS2PH $7, X2, (BX)          // c4e3791d1307
+	//TODO: VCVTPS2PH $7, X11, (BX)         // c463791d1b07
+	//TODO: VCVTPS2PH $7, X2, (R11)         // c4c3791d1307
+	//TODO: VCVTPS2PH $7, X11, (R11)        // c443791d1b07
+	//TODO: VCVTPS2PH $7, X2, X2            // c4e3791dd207
+	//TODO: VCVTPS2PH $7, X11, X2           // c463791dda07
+	//TODO: VCVTPS2PH $7, X2, X11           // c4c3791dd307
+	//TODO: VCVTPS2PH $7, X11, X11          // c443791ddb07
+	//TODO: VCVTSD2SI (BX), DX              // c4e17b2d13 or c5fb2d13
+	//TODO: VCVTSD2SI (R11), DX             // c4c17b2d13
+	//TODO: VCVTSD2SI X2, DX                // c4e17b2dd2 or c5fb2dd2
+	//TODO: VCVTSD2SI X11, DX               // c4c17b2dd3
+	//TODO: VCVTSD2SI (BX), R11             // c4617b2d1b or c57b2d1b
+	//TODO: VCVTSD2SI (R11), R11            // c4417b2d1b
+	//TODO: VCVTSD2SI X2, R11               // c4617b2dda or c57b2dda
+	//TODO: VCVTSD2SI X11, R11              // c4417b2ddb
+	//TODO: VCVTSD2SIQ (BX), DX             // c4e1fb2d13
+	//TODO: VCVTSD2SIQ (R11), DX            // c4c1fb2d13
+	//TODO: VCVTSD2SIQ X2, DX               // c4e1fb2dd2
+	//TODO: VCVTSD2SIQ X11, DX              // c4c1fb2dd3
+	//TODO: VCVTSD2SIQ (BX), R11            // c461fb2d1b
+	//TODO: VCVTSD2SIQ (R11), R11           // c441fb2d1b
+	//TODO: VCVTSD2SIQ X2, R11              // c461fb2dda
+	//TODO: VCVTSD2SIQ X11, R11             // c441fb2ddb
+	//TODO: VCVTSD2SS (BX), X9, X2          // c4e1335a13 or c5b35a13
+	//TODO: VCVTSD2SS (R11), X9, X2         // c4c1335a13
+	//TODO: VCVTSD2SS X2, X9, X2            // c4e1335ad2 or c5b35ad2
+	//TODO: VCVTSD2SS X11, X9, X2           // c4c1335ad3
+	//TODO: VCVTSD2SS (BX), X9, X11         // c461335a1b or c5335a1b
+	//TODO: VCVTSD2SS (R11), X9, X11        // c441335a1b
+	//TODO: VCVTSD2SS X2, X9, X11           // c461335ada or c5335ada
+	//TODO: VCVTSD2SS X11, X9, X11          // c441335adb
+	//TODO: VCVTSI2SDL (BX), X9, X2         // c4e1332a13 or c5b32a13
+	//TODO: VCVTSI2SDL (R11), X9, X2        // c4c1332a13
+	//TODO: VCVTSI2SDL DX, X9, X2           // c4e1332ad2 or c5b32ad2
+	//TODO: VCVTSI2SDL R11, X9, X2          // c4c1332ad3
+	//TODO: VCVTSI2SDL (BX), X9, X11        // c461332a1b or c5332a1b
+	//TODO: VCVTSI2SDL (R11), X9, X11       // c441332a1b
+	//TODO: VCVTSI2SDL DX, X9, X11          // c461332ada or c5332ada
+	//TODO: VCVTSI2SDL R11, X9, X11         // c441332adb
+	//TODO: VCVTSI2SDQ (BX), X9, X2         // c4e1b32a13
+	//TODO: VCVTSI2SDQ (R11), X9, X2        // c4c1b32a13
+	//TODO: VCVTSI2SDQ DX, X9, X2           // c4e1b32ad2
+	//TODO: VCVTSI2SDQ R11, X9, X2          // c4c1b32ad3
+	//TODO: VCVTSI2SDQ (BX), X9, X11        // c461b32a1b
+	//TODO: VCVTSI2SDQ (R11), X9, X11       // c441b32a1b
+	//TODO: VCVTSI2SDQ DX, X9, X11          // c461b32ada
+	//TODO: VCVTSI2SDQ R11, X9, X11         // c441b32adb
+	//TODO: VCVTSI2SSL (BX), X9, X2         // c4e1322a13 or c5b22a13
+	//TODO: VCVTSI2SSL (R11), X9, X2        // c4c1322a13
+	//TODO: VCVTSI2SSL DX, X9, X2           // c4e1322ad2 or c5b22ad2
+	//TODO: VCVTSI2SSL R11, X9, X2          // c4c1322ad3
+	//TODO: VCVTSI2SSL (BX), X9, X11        // c461322a1b or c5322a1b
+	//TODO: VCVTSI2SSL (R11), X9, X11       // c441322a1b
+	//TODO: VCVTSI2SSL DX, X9, X11          // c461322ada or c5322ada
+	//TODO: VCVTSI2SSL R11, X9, X11         // c441322adb
+	//TODO: VCVTSI2SSQ (BX), X9, X2         // c4e1b22a13
+	//TODO: VCVTSI2SSQ (R11), X9, X2        // c4c1b22a13
+	//TODO: VCVTSI2SSQ DX, X9, X2           // c4e1b22ad2
+	//TODO: VCVTSI2SSQ R11, X9, X2          // c4c1b22ad3
+	//TODO: VCVTSI2SSQ (BX), X9, X11        // c461b22a1b
+	//TODO: VCVTSI2SSQ (R11), X9, X11       // c441b22a1b
+	//TODO: VCVTSI2SSQ DX, X9, X11          // c461b22ada
+	//TODO: VCVTSI2SSQ R11, X9, X11         // c441b22adb
+	//TODO: VCVTSS2SD (BX), X9, X2          // c4e1325a13 or c5b25a13
+	//TODO: VCVTSS2SD (R11), X9, X2         // c4c1325a13
+	//TODO: VCVTSS2SD X2, X9, X2            // c4e1325ad2 or c5b25ad2
+	//TODO: VCVTSS2SD X11, X9, X2           // c4c1325ad3
+	//TODO: VCVTSS2SD (BX), X9, X11         // c461325a1b or c5325a1b
+	//TODO: VCVTSS2SD (R11), X9, X11        // c441325a1b
+	//TODO: VCVTSS2SD X2, X9, X11           // c461325ada or c5325ada
+	//TODO: VCVTSS2SD X11, X9, X11          // c441325adb
+	//TODO: VCVTSS2SI (BX), DX              // c4e17a2d13 or c5fa2d13
+	//TODO: VCVTSS2SI (R11), DX             // c4c17a2d13
+	//TODO: VCVTSS2SI X2, DX                // c4e17a2dd2 or c5fa2dd2
+	//TODO: VCVTSS2SI X11, DX               // c4c17a2dd3
+	//TODO: VCVTSS2SI (BX), R11             // c4617a2d1b or c57a2d1b
+	//TODO: VCVTSS2SI (R11), R11            // c4417a2d1b
+	//TODO: VCVTSS2SI X2, R11               // c4617a2dda or c57a2dda
+	//TODO: VCVTSS2SI X11, R11              // c4417a2ddb
+	//TODO: VCVTSS2SIQ (BX), DX             // c4e1fa2d13
+	//TODO: VCVTSS2SIQ (R11), DX            // c4c1fa2d13
+	//TODO: VCVTSS2SIQ X2, DX               // c4e1fa2dd2
+	//TODO: VCVTSS2SIQ X11, DX              // c4c1fa2dd3
+	//TODO: VCVTSS2SIQ (BX), R11            // c461fa2d1b
+	//TODO: VCVTSS2SIQ (R11), R11           // c441fa2d1b
+	//TODO: VCVTSS2SIQ X2, R11              // c461fa2dda
+	//TODO: VCVTSS2SIQ X11, R11             // c441fa2ddb
+	//TODO: VCVTTPD2DQX (BX), X2            // c4e179e613 or c5f9e613
+	//TODO: VCVTTPD2DQX (R11), X2           // c4c179e613
+	//TODO: VCVTTPD2DQX X2, X2              // c4e179e6d2 or c5f9e6d2
+	//TODO: VCVTTPD2DQX X11, X2             // c4c179e6d3
+	//TODO: VCVTTPD2DQX (BX), X11           // c46179e61b or c579e61b
+	//TODO: VCVTTPD2DQX (R11), X11          // c44179e61b
+	//TODO: VCVTTPD2DQX X2, X11             // c46179e6da or c579e6da
+	//TODO: VCVTTPD2DQX X11, X11            // c44179e6db
+	//TODO: VCVTTPD2DQY (BX), X2            // c4e17de613 or c5fde613
+	//TODO: VCVTTPD2DQY (R11), X2           // c4c17de613
+	//TODO: VCVTTPD2DQY Y2, X2              // c4e17de6d2 or c5fde6d2
+	//TODO: VCVTTPD2DQY Y11, X2             // c4c17de6d3
+	//TODO: VCVTTPD2DQY (BX), X11           // c4617de61b or c57de61b
+	//TODO: VCVTTPD2DQY (R11), X11          // c4417de61b
+	//TODO: VCVTTPD2DQY Y2, X11             // c4617de6da or c57de6da
+	//TODO: VCVTTPD2DQY Y11, X11            // c4417de6db
+	//TODO: VCVTTPS2DQ (BX), X2             // c4e17a5b13 or c5fa5b13
+	//TODO: VCVTTPS2DQ (R11), X2            // c4c17a5b13
+	//TODO: VCVTTPS2DQ X2, X2               // c4e17a5bd2 or c5fa5bd2
+	//TODO: VCVTTPS2DQ X11, X2              // c4c17a5bd3
+	//TODO: VCVTTPS2DQ (BX), X11            // c4617a5b1b or c57a5b1b
+	//TODO: VCVTTPS2DQ (R11), X11           // c4417a5b1b
+	//TODO: VCVTTPS2DQ X2, X11              // c4617a5bda or c57a5bda
+	//TODO: VCVTTPS2DQ X11, X11             // c4417a5bdb
+	//TODO: VCVTTPS2DQ (BX), Y2             // c4e17e5b13 or c5fe5b13
+	//TODO: VCVTTPS2DQ (R11), Y2            // c4c17e5b13
+	//TODO: VCVTTPS2DQ Y2, Y2               // c4e17e5bd2 or c5fe5bd2
+	//TODO: VCVTTPS2DQ Y11, Y2              // c4c17e5bd3
+	//TODO: VCVTTPS2DQ (BX), Y11            // c4617e5b1b or c57e5b1b
+	//TODO: VCVTTPS2DQ (R11), Y11           // c4417e5b1b
+	//TODO: VCVTTPS2DQ Y2, Y11              // c4617e5bda or c57e5bda
+	//TODO: VCVTTPS2DQ Y11, Y11             // c4417e5bdb
+	//TODO: VCVTTSD2SI (BX), DX             // c4e17b2c13 or c5fb2c13
+	//TODO: VCVTTSD2SI (R11), DX            // c4c17b2c13
+	//TODO: VCVTTSD2SI X2, DX               // c4e17b2cd2 or c5fb2cd2
+	//TODO: VCVTTSD2SI X11, DX              // c4c17b2cd3
+	//TODO: VCVTTSD2SI (BX), R11            // c4617b2c1b or c57b2c1b
+	//TODO: VCVTTSD2SI (R11), R11           // c4417b2c1b
+	//TODO: VCVTTSD2SI X2, R11              // c4617b2cda or c57b2cda
+	//TODO: VCVTTSD2SI X11, R11             // c4417b2cdb
+	//TODO: VCVTTSD2SIQ (BX), DX            // c4e1fb2c13
+	//TODO: VCVTTSD2SIQ (R11), DX           // c4c1fb2c13
+	//TODO: VCVTTSD2SIQ X2, DX              // c4e1fb2cd2
+	//TODO: VCVTTSD2SIQ X11, DX             // c4c1fb2cd3
+	//TODO: VCVTTSD2SIQ (BX), R11           // c461fb2c1b
+	//TODO: VCVTTSD2SIQ (R11), R11          // c441fb2c1b
+	//TODO: VCVTTSD2SIQ X2, R11             // c461fb2cda
+	//TODO: VCVTTSD2SIQ X11, R11            // c441fb2cdb
+	//TODO: VCVTTSS2SI (BX), DX             // c4e17a2c13 or c5fa2c13
+	//TODO: VCVTTSS2SI (R11), DX            // c4c17a2c13
+	//TODO: VCVTTSS2SI X2, DX               // c4e17a2cd2 or c5fa2cd2
+	//TODO: VCVTTSS2SI X11, DX              // c4c17a2cd3
+	//TODO: VCVTTSS2SI (BX), R11            // c4617a2c1b or c57a2c1b
+	//TODO: VCVTTSS2SI (R11), R11           // c4417a2c1b
+	//TODO: VCVTTSS2SI X2, R11              // c4617a2cda or c57a2cda
+	//TODO: VCVTTSS2SI X11, R11             // c4417a2cdb
+	//TODO: VCVTTSS2SIQ (BX), DX            // c4e1fa2c13
+	//TODO: VCVTTSS2SIQ (R11), DX           // c4c1fa2c13
+	//TODO: VCVTTSS2SIQ X2, DX              // c4e1fa2cd2
+	//TODO: VCVTTSS2SIQ X11, DX             // c4c1fa2cd3
+	//TODO: VCVTTSS2SIQ (BX), R11           // c461fa2c1b
+	//TODO: VCVTTSS2SIQ (R11), R11          // c441fa2c1b
+	//TODO: VCVTTSS2SIQ X2, R11             // c461fa2cda
+	//TODO: VCVTTSS2SIQ X11, R11            // c441fa2cdb
+	//TODO: VDIVPD (BX), X9, X2             // c4e1315e13 or c5b15e13
+	//TODO: VDIVPD (R11), X9, X2            // c4c1315e13
+	//TODO: VDIVPD X2, X9, X2               // c4e1315ed2 or c5b15ed2
+	//TODO: VDIVPD X11, X9, X2              // c4c1315ed3
+	//TODO: VDIVPD (BX), X9, X11            // c461315e1b or c5315e1b
+	//TODO: VDIVPD (R11), X9, X11           // c441315e1b
+	//TODO: VDIVPD X2, X9, X11              // c461315eda or c5315eda
+	//TODO: VDIVPD X11, X9, X11             // c441315edb
+	//TODO: VDIVPD (BX), Y15, Y2            // c4e1055e13 or c5855e13
+	//TODO: VDIVPD (R11), Y15, Y2           // c4c1055e13
+	//TODO: VDIVPD Y2, Y15, Y2              // c4e1055ed2 or c5855ed2
+	//TODO: VDIVPD Y11, Y15, Y2             // c4c1055ed3
+	//TODO: VDIVPD (BX), Y15, Y11           // c461055e1b or c5055e1b
+	//TODO: VDIVPD (R11), Y15, Y11          // c441055e1b
+	//TODO: VDIVPD Y2, Y15, Y11             // c461055eda or c5055eda
+	//TODO: VDIVPD Y11, Y15, Y11            // c441055edb
+	//TODO: VDIVPS (BX), X9, X2             // c4e1305e13 or c5b05e13
+	//TODO: VDIVPS (R11), X9, X2            // c4c1305e13
+	//TODO: VDIVPS X2, X9, X2               // c4e1305ed2 or c5b05ed2
+	//TODO: VDIVPS X11, X9, X2              // c4c1305ed3
+	//TODO: VDIVPS (BX), X9, X11            // c461305e1b or c5305e1b
+	//TODO: VDIVPS (R11), X9, X11           // c441305e1b
+	//TODO: VDIVPS X2, X9, X11              // c461305eda or c5305eda
+	//TODO: VDIVPS X11, X9, X11             // c441305edb
+	//TODO: VDIVPS (BX), Y15, Y2            // c4e1045e13 or c5845e13
+	//TODO: VDIVPS (R11), Y15, Y2           // c4c1045e13
+	//TODO: VDIVPS Y2, Y15, Y2              // c4e1045ed2 or c5845ed2
+	//TODO: VDIVPS Y11, Y15, Y2             // c4c1045ed3
+	//TODO: VDIVPS (BX), Y15, Y11           // c461045e1b or c5045e1b
+	//TODO: VDIVPS (R11), Y15, Y11          // c441045e1b
+	//TODO: VDIVPS Y2, Y15, Y11             // c461045eda or c5045eda
+	//TODO: VDIVPS Y11, Y15, Y11            // c441045edb
+	//TODO: VDIVSD (BX), X9, X2             // c4e1335e13 or c5b35e13
+	//TODO: VDIVSD (R11), X9, X2            // c4c1335e13
+	//TODO: VDIVSD X2, X9, X2               // c4e1335ed2 or c5b35ed2
+	//TODO: VDIVSD X11, X9, X2              // c4c1335ed3
+	//TODO: VDIVSD (BX), X9, X11            // c461335e1b or c5335e1b
+	//TODO: VDIVSD (R11), X9, X11           // c441335e1b
+	//TODO: VDIVSD X2, X9, X11              // c461335eda or c5335eda
+	//TODO: VDIVSD X11, X9, X11             // c441335edb
+	//TODO: VDIVSS (BX), X9, X2             // c4e1325e13 or c5b25e13
+	//TODO: VDIVSS (R11), X9, X2            // c4c1325e13
+	//TODO: VDIVSS X2, X9, X2               // c4e1325ed2 or c5b25ed2
+	//TODO: VDIVSS X11, X9, X2              // c4c1325ed3
+	//TODO: VDIVSS (BX), X9, X11            // c461325e1b or c5325e1b
+	//TODO: VDIVSS (R11), X9, X11           // c441325e1b
+	//TODO: VDIVSS X2, X9, X11              // c461325eda or c5325eda
+	//TODO: VDIVSS X11, X9, X11             // c441325edb
+	//TODO: VDPPD $7, (BX), X9, X2          // c4e331411307
+	//TODO: VDPPD $7, (R11), X9, X2         // c4c331411307
+	//TODO: VDPPD $7, X2, X9, X2            // c4e33141d207
+	//TODO: VDPPD $7, X11, X9, X2           // c4c33141d307
+	//TODO: VDPPD $7, (BX), X9, X11         // c46331411b07
+	//TODO: VDPPD $7, (R11), X9, X11        // c44331411b07
+	//TODO: VDPPD $7, X2, X9, X11           // c4633141da07
+	//TODO: VDPPD $7, X11, X9, X11          // c4433141db07
+	//TODO: VDPPS $7, (BX), X9, X2          // c4e331401307
+	//TODO: VDPPS $7, (R11), X9, X2         // c4c331401307
+	//TODO: VDPPS $7, X2, X9, X2            // c4e33140d207
+	//TODO: VDPPS $7, X11, X9, X2           // c4c33140d307
+	//TODO: VDPPS $7, (BX), X9, X11         // c46331401b07
+	//TODO: VDPPS $7, (R11), X9, X11        // c44331401b07
+	//TODO: VDPPS $7, X2, X9, X11           // c4633140da07
+	//TODO: VDPPS $7, X11, X9, X11          // c4433140db07
+	//TODO: VDPPS $7, (BX), Y15, Y2         // c4e305401307
+	//TODO: VDPPS $7, (R11), Y15, Y2        // c4c305401307
+	//TODO: VDPPS $7, Y2, Y15, Y2           // c4e30540d207
+	//TODO: VDPPS $7, Y11, Y15, Y2          // c4c30540d307
+	//TODO: VDPPS $7, (BX), Y15, Y11        // c46305401b07
+	//TODO: VDPPS $7, (R11), Y15, Y11       // c44305401b07
+	//TODO: VDPPS $7, Y2, Y15, Y11          // c4630540da07
+	//TODO: VDPPS $7, Y11, Y15, Y11         // c4430540db07
+	VERR (BX)                               // 0f0023
+	VERR (R11)                              // 410f0023
+	VERR DX                                 // 0f00e2
+	VERR R11                                // 410f00e3
+	VERW (BX)                               // 0f002b
+	VERW (R11)                              // 410f002b
+	VERW DX                                 // 0f00ea
+	VERW R11                                // 410f00eb
+	//TODO: VEXTRACTF128 $7, Y2, (BX)       // c4e37d191307
+	//TODO: VEXTRACTF128 $7, Y11, (BX)      // c4637d191b07
+	//TODO: VEXTRACTF128 $7, Y2, (R11)      // c4c37d191307
+	//TODO: VEXTRACTF128 $7, Y11, (R11)     // c4437d191b07
+	//TODO: VEXTRACTF128 $7, Y2, X2         // c4e37d19d207
+	//TODO: VEXTRACTF128 $7, Y11, X2        // c4637d19da07
+	//TODO: VEXTRACTF128 $7, Y2, X11        // c4c37d19d307
+	//TODO: VEXTRACTF128 $7, Y11, X11       // c4437d19db07
+	//TODO: VEXTRACTI128 $7, Y2, (BX)       // c4e37d391307
+	//TODO: VEXTRACTI128 $7, Y11, (BX)      // c4637d391b07
+	//TODO: VEXTRACTI128 $7, Y2, (R11)      // c4c37d391307
+	//TODO: VEXTRACTI128 $7, Y11, (R11)     // c4437d391b07
+	//TODO: VEXTRACTI128 $7, Y2, X2         // c4e37d39d207
+	//TODO: VEXTRACTI128 $7, Y11, X2        // c4637d39da07
+	//TODO: VEXTRACTI128 $7, Y2, X11        // c4c37d39d307
+	//TODO: VEXTRACTI128 $7, Y11, X11       // c4437d39db07
+	//TODO: VEXTRACTPS $7, X2, (BX)         // c4e379171307
+	//TODO: VEXTRACTPS $7, X11, (BX)        // c46379171b07
+	//TODO: VEXTRACTPS $7, X2, (R11)        // c4c379171307
+	//TODO: VEXTRACTPS $7, X11, (R11)       // c44379171b07
+	//TODO: VEXTRACTPS $7, X2, DX           // c4e37917d207
+	//TODO: VEXTRACTPS $7, X11, DX          // c4637917da07
+	//TODO: VEXTRACTPS $7, X2, R11          // c4c37917d307
+	//TODO: VEXTRACTPS $7, X11, R11         // c4437917db07
+	//TODO: VFMADD132PD (BX), X9, X2        // c4e2b19813
+	//TODO: VFMADD132PD (R11), X9, X2       // c4c2b19813
+	//TODO: VFMADD132PD X2, X9, X2          // c4e2b198d2
+	//TODO: VFMADD132PD X11, X9, X2         // c4c2b198d3
+	//TODO: VFMADD132PD (BX), X9, X11       // c462b1981b
+	//TODO: VFMADD132PD (R11), X9, X11      // c442b1981b
+	//TODO: VFMADD132PD X2, X9, X11         // c462b198da
+	//TODO: VFMADD132PD X11, X9, X11        // c442b198db
+	//TODO: VFMADD132PD (BX), Y15, Y2       // c4e2859813
+	//TODO: VFMADD132PD (R11), Y15, Y2      // c4c2859813
+	//TODO: VFMADD132PD Y2, Y15, Y2         // c4e28598d2
+	//TODO: VFMADD132PD Y11, Y15, Y2        // c4c28598d3
+	//TODO: VFMADD132PD (BX), Y15, Y11      // c46285981b
+	//TODO: VFMADD132PD (R11), Y15, Y11     // c44285981b
+	//TODO: VFMADD132PD Y2, Y15, Y11        // c4628598da
+	//TODO: VFMADD132PD Y11, Y15, Y11       // c4428598db
+	//TODO: VFMADD132PS (BX), X9, X2        // c4e2319813
+	//TODO: VFMADD132PS (R11), X9, X2       // c4c2319813
+	//TODO: VFMADD132PS X2, X9, X2          // c4e23198d2
+	//TODO: VFMADD132PS X11, X9, X2         // c4c23198d3
+	//TODO: VFMADD132PS (BX), X9, X11       // c46231981b
+	//TODO: VFMADD132PS (R11), X9, X11      // c44231981b
+	//TODO: VFMADD132PS X2, X9, X11         // c4623198da
+	//TODO: VFMADD132PS X11, X9, X11        // c4423198db
+	//TODO: VFMADD132PS (BX), Y15, Y2       // c4e2059813
+	//TODO: VFMADD132PS (R11), Y15, Y2      // c4c2059813
+	//TODO: VFMADD132PS Y2, Y15, Y2         // c4e20598d2
+	//TODO: VFMADD132PS Y11, Y15, Y2        // c4c20598d3
+	//TODO: VFMADD132PS (BX), Y15, Y11      // c46205981b
+	//TODO: VFMADD132PS (R11), Y15, Y11     // c44205981b
+	//TODO: VFMADD132PS Y2, Y15, Y11        // c4620598da
+	//TODO: VFMADD132PS Y11, Y15, Y11       // c4420598db
+	//TODO: VFMADD132SD (BX), X9, X2        // c4e2b19913
+	//TODO: VFMADD132SD (R11), X9, X2       // c4c2b19913
+	//TODO: VFMADD132SD X2, X9, X2          // c4e2b199d2
+	//TODO: VFMADD132SD X11, X9, X2         // c4c2b199d3
+	//TODO: VFMADD132SD (BX), X9, X11       // c462b1991b
+	//TODO: VFMADD132SD (R11), X9, X11      // c442b1991b
+	//TODO: VFMADD132SD X2, X9, X11         // c462b199da
+	//TODO: VFMADD132SD X11, X9, X11        // c442b199db
+	//TODO: VFMADD132SS (BX), X9, X2        // c4e2319913
+	//TODO: VFMADD132SS (R11), X9, X2       // c4c2319913
+	//TODO: VFMADD132SS X2, X9, X2          // c4e23199d2
+	//TODO: VFMADD132SS X11, X9, X2         // c4c23199d3
+	//TODO: VFMADD132SS (BX), X9, X11       // c46231991b
+	//TODO: VFMADD132SS (R11), X9, X11      // c44231991b
+	//TODO: VFMADD132SS X2, X9, X11         // c4623199da
+	//TODO: VFMADD132SS X11, X9, X11        // c4423199db
+	//TODO: VFMADD213PD (BX), X9, X2        // c4e2b1a813
+	//TODO: VFMADD213PD (R11), X9, X2       // c4c2b1a813
+	//TODO: VFMADD213PD X2, X9, X2          // c4e2b1a8d2
+	//TODO: VFMADD213PD X11, X9, X2         // c4c2b1a8d3
+	//TODO: VFMADD213PD (BX), X9, X11       // c462b1a81b
+	//TODO: VFMADD213PD (R11), X9, X11      // c442b1a81b
+	//TODO: VFMADD213PD X2, X9, X11         // c462b1a8da
+	//TODO: VFMADD213PD X11, X9, X11        // c442b1a8db
+	//TODO: VFMADD213PD (BX), Y15, Y2       // c4e285a813
+	//TODO: VFMADD213PD (R11), Y15, Y2      // c4c285a813
+	//TODO: VFMADD213PD Y2, Y15, Y2         // c4e285a8d2
+	//TODO: VFMADD213PD Y11, Y15, Y2        // c4c285a8d3
+	//TODO: VFMADD213PD (BX), Y15, Y11      // c46285a81b
+	//TODO: VFMADD213PD (R11), Y15, Y11     // c44285a81b
+	//TODO: VFMADD213PD Y2, Y15, Y11        // c46285a8da
+	//TODO: VFMADD213PD Y11, Y15, Y11       // c44285a8db
+	//TODO: VFMADD213PS (BX), X9, X2        // c4e231a813
+	//TODO: VFMADD213PS (R11), X9, X2       // c4c231a813
+	//TODO: VFMADD213PS X2, X9, X2          // c4e231a8d2
+	//TODO: VFMADD213PS X11, X9, X2         // c4c231a8d3
+	//TODO: VFMADD213PS (BX), X9, X11       // c46231a81b
+	//TODO: VFMADD213PS (R11), X9, X11      // c44231a81b
+	//TODO: VFMADD213PS X2, X9, X11         // c46231a8da
+	//TODO: VFMADD213PS X11, X9, X11        // c44231a8db
+	//TODO: VFMADD213PS (BX), Y15, Y2       // c4e205a813
+	//TODO: VFMADD213PS (R11), Y15, Y2      // c4c205a813
+	//TODO: VFMADD213PS Y2, Y15, Y2         // c4e205a8d2
+	//TODO: VFMADD213PS Y11, Y15, Y2        // c4c205a8d3
+	//TODO: VFMADD213PS (BX), Y15, Y11      // c46205a81b
+	//TODO: VFMADD213PS (R11), Y15, Y11     // c44205a81b
+	//TODO: VFMADD213PS Y2, Y15, Y11        // c46205a8da
+	//TODO: VFMADD213PS Y11, Y15, Y11       // c44205a8db
+	//TODO: VFMADD213SD (BX), X9, X2        // c4e2b1a913
+	//TODO: VFMADD213SD (R11), X9, X2       // c4c2b1a913
+	//TODO: VFMADD213SD X2, X9, X2          // c4e2b1a9d2
+	//TODO: VFMADD213SD X11, X9, X2         // c4c2b1a9d3
+	//TODO: VFMADD213SD (BX), X9, X11       // c462b1a91b
+	//TODO: VFMADD213SD (R11), X9, X11      // c442b1a91b
+	//TODO: VFMADD213SD X2, X9, X11         // c462b1a9da
+	//TODO: VFMADD213SD X11, X9, X11        // c442b1a9db
+	//TODO: VFMADD213SS (BX), X9, X2        // c4e231a913
+	//TODO: VFMADD213SS (R11), X9, X2       // c4c231a913
+	//TODO: VFMADD213SS X2, X9, X2          // c4e231a9d2
+	//TODO: VFMADD213SS X11, X9, X2         // c4c231a9d3
+	//TODO: VFMADD213SS (BX), X9, X11       // c46231a91b
+	//TODO: VFMADD213SS (R11), X9, X11      // c44231a91b
+	//TODO: VFMADD213SS X2, X9, X11         // c46231a9da
+	//TODO: VFMADD213SS X11, X9, X11        // c44231a9db
+	//TODO: VFMADD231PD (BX), X9, X2        // c4e2b1b813
+	//TODO: VFMADD231PD (R11), X9, X2       // c4c2b1b813
+	//TODO: VFMADD231PD X2, X9, X2          // c4e2b1b8d2
+	//TODO: VFMADD231PD X11, X9, X2         // c4c2b1b8d3
+	//TODO: VFMADD231PD (BX), X9, X11       // c462b1b81b
+	//TODO: VFMADD231PD (R11), X9, X11      // c442b1b81b
+	//TODO: VFMADD231PD X2, X9, X11         // c462b1b8da
+	//TODO: VFMADD231PD X11, X9, X11        // c442b1b8db
+	//TODO: VFMADD231PD (BX), Y15, Y2       // c4e285b813
+	//TODO: VFMADD231PD (R11), Y15, Y2      // c4c285b813
+	//TODO: VFMADD231PD Y2, Y15, Y2         // c4e285b8d2
+	//TODO: VFMADD231PD Y11, Y15, Y2        // c4c285b8d3
+	//TODO: VFMADD231PD (BX), Y15, Y11      // c46285b81b
+	//TODO: VFMADD231PD (R11), Y15, Y11     // c44285b81b
+	//TODO: VFMADD231PD Y2, Y15, Y11        // c46285b8da
+	//TODO: VFMADD231PD Y11, Y15, Y11       // c44285b8db
+	//TODO: VFMADD231PS (BX), X9, X2        // c4e231b813
+	//TODO: VFMADD231PS (R11), X9, X2       // c4c231b813
+	//TODO: VFMADD231PS X2, X9, X2          // c4e231b8d2
+	//TODO: VFMADD231PS X11, X9, X2         // c4c231b8d3
+	//TODO: VFMADD231PS (BX), X9, X11       // c46231b81b
+	//TODO: VFMADD231PS (R11), X9, X11      // c44231b81b
+	//TODO: VFMADD231PS X2, X9, X11         // c46231b8da
+	//TODO: VFMADD231PS X11, X9, X11        // c44231b8db
+	//TODO: VFMADD231PS (BX), Y15, Y2       // c4e205b813
+	//TODO: VFMADD231PS (R11), Y15, Y2      // c4c205b813
+	//TODO: VFMADD231PS Y2, Y15, Y2         // c4e205b8d2
+	//TODO: VFMADD231PS Y11, Y15, Y2        // c4c205b8d3
+	//TODO: VFMADD231PS (BX), Y15, Y11      // c46205b81b
+	//TODO: VFMADD231PS (R11), Y15, Y11     // c44205b81b
+	//TODO: VFMADD231PS Y2, Y15, Y11        // c46205b8da
+	//TODO: VFMADD231PS Y11, Y15, Y11       // c44205b8db
+	//TODO: VFMADD231SD (BX), X9, X2        // c4e2b1b913
+	//TODO: VFMADD231SD (R11), X9, X2       // c4c2b1b913
+	//TODO: VFMADD231SD X2, X9, X2          // c4e2b1b9d2
+	//TODO: VFMADD231SD X11, X9, X2         // c4c2b1b9d3
+	//TODO: VFMADD231SD (BX), X9, X11       // c462b1b91b
+	//TODO: VFMADD231SD (R11), X9, X11      // c442b1b91b
+	//TODO: VFMADD231SD X2, X9, X11         // c462b1b9da
+	//TODO: VFMADD231SD X11, X9, X11        // c442b1b9db
+	//TODO: VFMADD231SS (BX), X9, X2        // c4e231b913
+	//TODO: VFMADD231SS (R11), X9, X2       // c4c231b913
+	//TODO: VFMADD231SS X2, X9, X2          // c4e231b9d2
+	//TODO: VFMADD231SS X11, X9, X2         // c4c231b9d3
+	//TODO: VFMADD231SS (BX), X9, X11       // c46231b91b
+	//TODO: VFMADD231SS (R11), X9, X11      // c44231b91b
+	//TODO: VFMADD231SS X2, X9, X11         // c46231b9da
+	//TODO: VFMADD231SS X11, X9, X11        // c44231b9db
+	//TODO: VFMADDSUB132PD (BX), X9, X2     // c4e2b19613
+	//TODO: VFMADDSUB132PD (R11), X9, X2    // c4c2b19613
+	//TODO: VFMADDSUB132PD X2, X9, X2       // c4e2b196d2
+	//TODO: VFMADDSUB132PD X11, X9, X2      // c4c2b196d3
+	//TODO: VFMADDSUB132PD (BX), X9, X11    // c462b1961b
+	//TODO: VFMADDSUB132PD (R11), X9, X11   // c442b1961b
+	//TODO: VFMADDSUB132PD X2, X9, X11      // c462b196da
+	//TODO: VFMADDSUB132PD X11, X9, X11     // c442b196db
+	//TODO: VFMADDSUB132PD (BX), Y15, Y2    // c4e2859613
+	//TODO: VFMADDSUB132PD (R11), Y15, Y2   // c4c2859613
+	//TODO: VFMADDSUB132PD Y2, Y15, Y2      // c4e28596d2
+	//TODO: VFMADDSUB132PD Y11, Y15, Y2     // c4c28596d3
+	//TODO: VFMADDSUB132PD (BX), Y15, Y11   // c46285961b
+	//TODO: VFMADDSUB132PD (R11), Y15, Y11  // c44285961b
+	//TODO: VFMADDSUB132PD Y2, Y15, Y11     // c4628596da
+	//TODO: VFMADDSUB132PD Y11, Y15, Y11    // c4428596db
+	//TODO: VFMADDSUB132PS (BX), X9, X2     // c4e2319613
+	//TODO: VFMADDSUB132PS (R11), X9, X2    // c4c2319613
+	//TODO: VFMADDSUB132PS X2, X9, X2       // c4e23196d2
+	//TODO: VFMADDSUB132PS X11, X9, X2      // c4c23196d3
+	//TODO: VFMADDSUB132PS (BX), X9, X11    // c46231961b
+	//TODO: VFMADDSUB132PS (R11), X9, X11   // c44231961b
+	//TODO: VFMADDSUB132PS X2, X9, X11      // c4623196da
+	//TODO: VFMADDSUB132PS X11, X9, X11     // c4423196db
+	//TODO: VFMADDSUB132PS (BX), Y15, Y2    // c4e2059613
+	//TODO: VFMADDSUB132PS (R11), Y15, Y2   // c4c2059613
+	//TODO: VFMADDSUB132PS Y2, Y15, Y2      // c4e20596d2
+	//TODO: VFMADDSUB132PS Y11, Y15, Y2     // c4c20596d3
+	//TODO: VFMADDSUB132PS (BX), Y15, Y11   // c46205961b
+	//TODO: VFMADDSUB132PS (R11), Y15, Y11  // c44205961b
+	//TODO: VFMADDSUB132PS Y2, Y15, Y11     // c4620596da
+	//TODO: VFMADDSUB132PS Y11, Y15, Y11    // c4420596db
+	//TODO: VFMADDSUB213PD (BX), X9, X2     // c4e2b1a613
+	//TODO: VFMADDSUB213PD (R11), X9, X2    // c4c2b1a613
+	//TODO: VFMADDSUB213PD X2, X9, X2       // c4e2b1a6d2
+	//TODO: VFMADDSUB213PD X11, X9, X2      // c4c2b1a6d3
+	//TODO: VFMADDSUB213PD (BX), X9, X11    // c462b1a61b
+	//TODO: VFMADDSUB213PD (R11), X9, X11   // c442b1a61b
+	//TODO: VFMADDSUB213PD X2, X9, X11      // c462b1a6da
+	//TODO: VFMADDSUB213PD X11, X9, X11     // c442b1a6db
+	//TODO: VFMADDSUB213PD (BX), Y15, Y2    // c4e285a613
+	//TODO: VFMADDSUB213PD (R11), Y15, Y2   // c4c285a613
+	//TODO: VFMADDSUB213PD Y2, Y15, Y2      // c4e285a6d2
+	//TODO: VFMADDSUB213PD Y11, Y15, Y2     // c4c285a6d3
+	//TODO: VFMADDSUB213PD (BX), Y15, Y11   // c46285a61b
+	//TODO: VFMADDSUB213PD (R11), Y15, Y11  // c44285a61b
+	//TODO: VFMADDSUB213PD Y2, Y15, Y11     // c46285a6da
+	//TODO: VFMADDSUB213PD Y11, Y15, Y11    // c44285a6db
+	//TODO: VFMADDSUB213PS (BX), X9, X2     // c4e231a613
+	//TODO: VFMADDSUB213PS (R11), X9, X2    // c4c231a613
+	//TODO: VFMADDSUB213PS X2, X9, X2       // c4e231a6d2
+	//TODO: VFMADDSUB213PS X11, X9, X2      // c4c231a6d3
+	//TODO: VFMADDSUB213PS (BX), X9, X11    // c46231a61b
+	//TODO: VFMADDSUB213PS (R11), X9, X11   // c44231a61b
+	//TODO: VFMADDSUB213PS X2, X9, X11      // c46231a6da
+	//TODO: VFMADDSUB213PS X11, X9, X11     // c44231a6db
+	//TODO: VFMADDSUB213PS (BX), Y15, Y2    // c4e205a613
+	//TODO: VFMADDSUB213PS (R11), Y15, Y2   // c4c205a613
+	//TODO: VFMADDSUB213PS Y2, Y15, Y2      // c4e205a6d2
+	//TODO: VFMADDSUB213PS Y11, Y15, Y2     // c4c205a6d3
+	//TODO: VFMADDSUB213PS (BX), Y15, Y11   // c46205a61b
+	//TODO: VFMADDSUB213PS (R11), Y15, Y11  // c44205a61b
+	//TODO: VFMADDSUB213PS Y2, Y15, Y11     // c46205a6da
+	//TODO: VFMADDSUB213PS Y11, Y15, Y11    // c44205a6db
+	//TODO: VFMADDSUB231PD (BX), X9, X2     // c4e2b1b613
+	//TODO: VFMADDSUB231PD (R11), X9, X2    // c4c2b1b613
+	//TODO: VFMADDSUB231PD X2, X9, X2       // c4e2b1b6d2
+	//TODO: VFMADDSUB231PD X11, X9, X2      // c4c2b1b6d3
+	//TODO: VFMADDSUB231PD (BX), X9, X11    // c462b1b61b
+	//TODO: VFMADDSUB231PD (R11), X9, X11   // c442b1b61b
+	//TODO: VFMADDSUB231PD X2, X9, X11      // c462b1b6da
+	//TODO: VFMADDSUB231PD X11, X9, X11     // c442b1b6db
+	//TODO: VFMADDSUB231PD (BX), Y15, Y2    // c4e285b613
+	//TODO: VFMADDSUB231PD (R11), Y15, Y2   // c4c285b613
+	//TODO: VFMADDSUB231PD Y2, Y15, Y2      // c4e285b6d2
+	//TODO: VFMADDSUB231PD Y11, Y15, Y2     // c4c285b6d3
+	//TODO: VFMADDSUB231PD (BX), Y15, Y11   // c46285b61b
+	//TODO: VFMADDSUB231PD (R11), Y15, Y11  // c44285b61b
+	//TODO: VFMADDSUB231PD Y2, Y15, Y11     // c46285b6da
+	//TODO: VFMADDSUB231PD Y11, Y15, Y11    // c44285b6db
+	//TODO: VFMADDSUB231PS (BX), X9, X2     // c4e231b613
+	//TODO: VFMADDSUB231PS (R11), X9, X2    // c4c231b613
+	//TODO: VFMADDSUB231PS X2, X9, X2       // c4e231b6d2
+	//TODO: VFMADDSUB231PS X11, X9, X2      // c4c231b6d3
+	//TODO: VFMADDSUB231PS (BX), X9, X11    // c46231b61b
+	//TODO: VFMADDSUB231PS (R11), X9, X11   // c44231b61b
+	//TODO: VFMADDSUB231PS X2, X9, X11      // c46231b6da
+	//TODO: VFMADDSUB231PS X11, X9, X11     // c44231b6db
+	//TODO: VFMADDSUB231PS (BX), Y15, Y2    // c4e205b613
+	//TODO: VFMADDSUB231PS (R11), Y15, Y2   // c4c205b613
+	//TODO: VFMADDSUB231PS Y2, Y15, Y2      // c4e205b6d2
+	//TODO: VFMADDSUB231PS Y11, Y15, Y2     // c4c205b6d3
+	//TODO: VFMADDSUB231PS (BX), Y15, Y11   // c46205b61b
+	//TODO: VFMADDSUB231PS (R11), Y15, Y11  // c44205b61b
+	//TODO: VFMADDSUB231PS Y2, Y15, Y11     // c46205b6da
+	//TODO: VFMADDSUB231PS Y11, Y15, Y11    // c44205b6db
+	//TODO: VFMSUB132PD (BX), X9, X2        // c4e2b19a13
+	//TODO: VFMSUB132PD (R11), X9, X2       // c4c2b19a13
+	//TODO: VFMSUB132PD X2, X9, X2          // c4e2b19ad2
+	//TODO: VFMSUB132PD X11, X9, X2         // c4c2b19ad3
+	//TODO: VFMSUB132PD (BX), X9, X11       // c462b19a1b
+	//TODO: VFMSUB132PD (R11), X9, X11      // c442b19a1b
+	//TODO: VFMSUB132PD X2, X9, X11         // c462b19ada
+	//TODO: VFMSUB132PD X11, X9, X11        // c442b19adb
+	//TODO: VFMSUB132PD (BX), Y15, Y2       // c4e2859a13
+	//TODO: VFMSUB132PD (R11), Y15, Y2      // c4c2859a13
+	//TODO: VFMSUB132PD Y2, Y15, Y2         // c4e2859ad2
+	//TODO: VFMSUB132PD Y11, Y15, Y2        // c4c2859ad3
+	//TODO: VFMSUB132PD (BX), Y15, Y11      // c462859a1b
+	//TODO: VFMSUB132PD (R11), Y15, Y11     // c442859a1b
+	//TODO: VFMSUB132PD Y2, Y15, Y11        // c462859ada
+	//TODO: VFMSUB132PD Y11, Y15, Y11       // c442859adb
+	//TODO: VFMSUB132PS (BX), X9, X2        // c4e2319a13
+	//TODO: VFMSUB132PS (R11), X9, X2       // c4c2319a13
+	//TODO: VFMSUB132PS X2, X9, X2          // c4e2319ad2
+	//TODO: VFMSUB132PS X11, X9, X2         // c4c2319ad3
+	//TODO: VFMSUB132PS (BX), X9, X11       // c462319a1b
+	//TODO: VFMSUB132PS (R11), X9, X11      // c442319a1b
+	//TODO: VFMSUB132PS X2, X9, X11         // c462319ada
+	//TODO: VFMSUB132PS X11, X9, X11        // c442319adb
+	//TODO: VFMSUB132PS (BX), Y15, Y2       // c4e2059a13
+	//TODO: VFMSUB132PS (R11), Y15, Y2      // c4c2059a13
+	//TODO: VFMSUB132PS Y2, Y15, Y2         // c4e2059ad2
+	//TODO: VFMSUB132PS Y11, Y15, Y2        // c4c2059ad3
+	//TODO: VFMSUB132PS (BX), Y15, Y11      // c462059a1b
+	//TODO: VFMSUB132PS (R11), Y15, Y11     // c442059a1b
+	//TODO: VFMSUB132PS Y2, Y15, Y11        // c462059ada
+	//TODO: VFMSUB132PS Y11, Y15, Y11       // c442059adb
+	//TODO: VFMSUB132SD (BX), X9, X2        // c4e2b19b13
+	//TODO: VFMSUB132SD (R11), X9, X2       // c4c2b19b13
+	//TODO: VFMSUB132SD X2, X9, X2          // c4e2b19bd2
+	//TODO: VFMSUB132SD X11, X9, X2         // c4c2b19bd3
+	//TODO: VFMSUB132SD (BX), X9, X11       // c462b19b1b
+	//TODO: VFMSUB132SD (R11), X9, X11      // c442b19b1b
+	//TODO: VFMSUB132SD X2, X9, X11         // c462b19bda
+	//TODO: VFMSUB132SD X11, X9, X11        // c442b19bdb
+	//TODO: VFMSUB132SS (BX), X9, X2        // c4e2319b13
+	//TODO: VFMSUB132SS (R11), X9, X2       // c4c2319b13
+	//TODO: VFMSUB132SS X2, X9, X2          // c4e2319bd2
+	//TODO: VFMSUB132SS X11, X9, X2         // c4c2319bd3
+	//TODO: VFMSUB132SS (BX), X9, X11       // c462319b1b
+	//TODO: VFMSUB132SS (R11), X9, X11      // c442319b1b
+	//TODO: VFMSUB132SS X2, X9, X11         // c462319bda
+	//TODO: VFMSUB132SS X11, X9, X11        // c442319bdb
+	//TODO: VFMSUB213PD (BX), X9, X2        // c4e2b1aa13
+	//TODO: VFMSUB213PD (R11), X9, X2       // c4c2b1aa13
+	//TODO: VFMSUB213PD X2, X9, X2          // c4e2b1aad2
+	//TODO: VFMSUB213PD X11, X9, X2         // c4c2b1aad3
+	//TODO: VFMSUB213PD (BX), X9, X11       // c462b1aa1b
+	//TODO: VFMSUB213PD (R11), X9, X11      // c442b1aa1b
+	//TODO: VFMSUB213PD X2, X9, X11         // c462b1aada
+	//TODO: VFMSUB213PD X11, X9, X11        // c442b1aadb
+	//TODO: VFMSUB213PD (BX), Y15, Y2       // c4e285aa13
+	//TODO: VFMSUB213PD (R11), Y15, Y2      // c4c285aa13
+	//TODO: VFMSUB213PD Y2, Y15, Y2         // c4e285aad2
+	//TODO: VFMSUB213PD Y11, Y15, Y2        // c4c285aad3
+	//TODO: VFMSUB213PD (BX), Y15, Y11      // c46285aa1b
+	//TODO: VFMSUB213PD (R11), Y15, Y11     // c44285aa1b
+	//TODO: VFMSUB213PD Y2, Y15, Y11        // c46285aada
+	//TODO: VFMSUB213PD Y11, Y15, Y11       // c44285aadb
+	//TODO: VFMSUB213PS (BX), X9, X2        // c4e231aa13
+	//TODO: VFMSUB213PS (R11), X9, X2       // c4c231aa13
+	//TODO: VFMSUB213PS X2, X9, X2          // c4e231aad2
+	//TODO: VFMSUB213PS X11, X9, X2         // c4c231aad3
+	//TODO: VFMSUB213PS (BX), X9, X11       // c46231aa1b
+	//TODO: VFMSUB213PS (R11), X9, X11      // c44231aa1b
+	//TODO: VFMSUB213PS X2, X9, X11         // c46231aada
+	//TODO: VFMSUB213PS X11, X9, X11        // c44231aadb
+	//TODO: VFMSUB213PS (BX), Y15, Y2       // c4e205aa13
+	//TODO: VFMSUB213PS (R11), Y15, Y2      // c4c205aa13
+	//TODO: VFMSUB213PS Y2, Y15, Y2         // c4e205aad2
+	//TODO: VFMSUB213PS Y11, Y15, Y2        // c4c205aad3
+	//TODO: VFMSUB213PS (BX), Y15, Y11      // c46205aa1b
+	//TODO: VFMSUB213PS (R11), Y15, Y11     // c44205aa1b
+	//TODO: VFMSUB213PS Y2, Y15, Y11        // c46205aada
+	//TODO: VFMSUB213PS Y11, Y15, Y11       // c44205aadb
+	//TODO: VFMSUB213SD (BX), X9, X2        // c4e2b1ab13
+	//TODO: VFMSUB213SD (R11), X9, X2       // c4c2b1ab13
+	//TODO: VFMSUB213SD X2, X9, X2          // c4e2b1abd2
+	//TODO: VFMSUB213SD X11, X9, X2         // c4c2b1abd3
+	//TODO: VFMSUB213SD (BX), X9, X11       // c462b1ab1b
+	//TODO: VFMSUB213SD (R11), X9, X11      // c442b1ab1b
+	//TODO: VFMSUB213SD X2, X9, X11         // c462b1abda
+	//TODO: VFMSUB213SD X11, X9, X11        // c442b1abdb
+	//TODO: VFMSUB213SS (BX), X9, X2        // c4e231ab13
+	//TODO: VFMSUB213SS (R11), X9, X2       // c4c231ab13
+	//TODO: VFMSUB213SS X2, X9, X2          // c4e231abd2
+	//TODO: VFMSUB213SS X11, X9, X2         // c4c231abd3
+	//TODO: VFMSUB213SS (BX), X9, X11       // c46231ab1b
+	//TODO: VFMSUB213SS (R11), X9, X11      // c44231ab1b
+	//TODO: VFMSUB213SS X2, X9, X11         // c46231abda
+	//TODO: VFMSUB213SS X11, X9, X11        // c44231abdb
+	//TODO: VFMSUB231PD (BX), X9, X2        // c4e2b1ba13
+	//TODO: VFMSUB231PD (R11), X9, X2       // c4c2b1ba13
+	//TODO: VFMSUB231PD X2, X9, X2          // c4e2b1bad2
+	//TODO: VFMSUB231PD X11, X9, X2         // c4c2b1bad3
+	//TODO: VFMSUB231PD (BX), X9, X11       // c462b1ba1b
+	//TODO: VFMSUB231PD (R11), X9, X11      // c442b1ba1b
+	//TODO: VFMSUB231PD X2, X9, X11         // c462b1bada
+	//TODO: VFMSUB231PD X11, X9, X11        // c442b1badb
+	//TODO: VFMSUB231PD (BX), Y15, Y2       // c4e285ba13
+	//TODO: VFMSUB231PD (R11), Y15, Y2      // c4c285ba13
+	//TODO: VFMSUB231PD Y2, Y15, Y2         // c4e285bad2
+	//TODO: VFMSUB231PD Y11, Y15, Y2        // c4c285bad3
+	//TODO: VFMSUB231PD (BX), Y15, Y11      // c46285ba1b
+	//TODO: VFMSUB231PD (R11), Y15, Y11     // c44285ba1b
+	//TODO: VFMSUB231PD Y2, Y15, Y11        // c46285bada
+	//TODO: VFMSUB231PD Y11, Y15, Y11       // c44285badb
+	//TODO: VFMSUB231PS (BX), X9, X2        // c4e231ba13
+	//TODO: VFMSUB231PS (R11), X9, X2       // c4c231ba13
+	//TODO: VFMSUB231PS X2, X9, X2          // c4e231bad2
+	//TODO: VFMSUB231PS X11, X9, X2         // c4c231bad3
+	//TODO: VFMSUB231PS (BX), X9, X11       // c46231ba1b
+	//TODO: VFMSUB231PS (R11), X9, X11      // c44231ba1b
+	//TODO: VFMSUB231PS X2, X9, X11         // c46231bada
+	//TODO: VFMSUB231PS X11, X9, X11        // c44231badb
+	//TODO: VFMSUB231PS (BX), Y15, Y2       // c4e205ba13
+	//TODO: VFMSUB231PS (R11), Y15, Y2      // c4c205ba13
+	//TODO: VFMSUB231PS Y2, Y15, Y2         // c4e205bad2
+	//TODO: VFMSUB231PS Y11, Y15, Y2        // c4c205bad3
+	//TODO: VFMSUB231PS (BX), Y15, Y11      // c46205ba1b
+	//TODO: VFMSUB231PS (R11), Y15, Y11     // c44205ba1b
+	//TODO: VFMSUB231PS Y2, Y15, Y11        // c46205bada
+	//TODO: VFMSUB231PS Y11, Y15, Y11       // c44205badb
+	//TODO: VFMSUB231SD (BX), X9, X2        // c4e2b1bb13
+	//TODO: VFMSUB231SD (R11), X9, X2       // c4c2b1bb13
+	//TODO: VFMSUB231SD X2, X9, X2          // c4e2b1bbd2
+	//TODO: VFMSUB231SD X11, X9, X2         // c4c2b1bbd3
+	//TODO: VFMSUB231SD (BX), X9, X11       // c462b1bb1b
+	//TODO: VFMSUB231SD (R11), X9, X11      // c442b1bb1b
+	//TODO: VFMSUB231SD X2, X9, X11         // c462b1bbda
+	//TODO: VFMSUB231SD X11, X9, X11        // c442b1bbdb
+	//TODO: VFMSUB231SS (BX), X9, X2        // c4e231bb13
+	//TODO: VFMSUB231SS (R11), X9, X2       // c4c231bb13
+	//TODO: VFMSUB231SS X2, X9, X2          // c4e231bbd2
+	//TODO: VFMSUB231SS X11, X9, X2         // c4c231bbd3
+	//TODO: VFMSUB231SS (BX), X9, X11       // c46231bb1b
+	//TODO: VFMSUB231SS (R11), X9, X11      // c44231bb1b
+	//TODO: VFMSUB231SS X2, X9, X11         // c46231bbda
+	//TODO: VFMSUB231SS X11, X9, X11        // c44231bbdb
+	//TODO: VFMSUBADD132PD (BX), X9, X2     // c4e2b19713
+	//TODO: VFMSUBADD132PD (R11), X9, X2    // c4c2b19713
+	//TODO: VFMSUBADD132PD X2, X9, X2       // c4e2b197d2
+	//TODO: VFMSUBADD132PD X11, X9, X2      // c4c2b197d3
+	//TODO: VFMSUBADD132PD (BX), X9, X11    // c462b1971b
+	//TODO: VFMSUBADD132PD (R11), X9, X11   // c442b1971b
+	//TODO: VFMSUBADD132PD X2, X9, X11      // c462b197da
+	//TODO: VFMSUBADD132PD X11, X9, X11     // c442b197db
+	//TODO: VFMSUBADD132PD (BX), Y15, Y2    // c4e2859713
+	//TODO: VFMSUBADD132PD (R11), Y15, Y2   // c4c2859713
+	//TODO: VFMSUBADD132PD Y2, Y15, Y2      // c4e28597d2
+	//TODO: VFMSUBADD132PD Y11, Y15, Y2     // c4c28597d3
+	//TODO: VFMSUBADD132PD (BX), Y15, Y11   // c46285971b
+	//TODO: VFMSUBADD132PD (R11), Y15, Y11  // c44285971b
+	//TODO: VFMSUBADD132PD Y2, Y15, Y11     // c4628597da
+	//TODO: VFMSUBADD132PD Y11, Y15, Y11    // c4428597db
+	//TODO: VFMSUBADD132PS (BX), X9, X2     // c4e2319713
+	//TODO: VFMSUBADD132PS (R11), X9, X2    // c4c2319713
+	//TODO: VFMSUBADD132PS X2, X9, X2       // c4e23197d2
+	//TODO: VFMSUBADD132PS X11, X9, X2      // c4c23197d3
+	//TODO: VFMSUBADD132PS (BX), X9, X11    // c46231971b
+	//TODO: VFMSUBADD132PS (R11), X9, X11   // c44231971b
+	//TODO: VFMSUBADD132PS X2, X9, X11      // c4623197da
+	//TODO: VFMSUBADD132PS X11, X9, X11     // c4423197db
+	//TODO: VFMSUBADD132PS (BX), Y15, Y2    // c4e2059713
+	//TODO: VFMSUBADD132PS (R11), Y15, Y2   // c4c2059713
+	//TODO: VFMSUBADD132PS Y2, Y15, Y2      // c4e20597d2
+	//TODO: VFMSUBADD132PS Y11, Y15, Y2     // c4c20597d3
+	//TODO: VFMSUBADD132PS (BX), Y15, Y11   // c46205971b
+	//TODO: VFMSUBADD132PS (R11), Y15, Y11  // c44205971b
+	//TODO: VFMSUBADD132PS Y2, Y15, Y11     // c4620597da
+	//TODO: VFMSUBADD132PS Y11, Y15, Y11    // c4420597db
+	//TODO: VFMSUBADD213PD (BX), X9, X2     // c4e2b1a713
+	//TODO: VFMSUBADD213PD (R11), X9, X2    // c4c2b1a713
+	//TODO: VFMSUBADD213PD X2, X9, X2       // c4e2b1a7d2
+	//TODO: VFMSUBADD213PD X11, X9, X2      // c4c2b1a7d3
+	//TODO: VFMSUBADD213PD (BX), X9, X11    // c462b1a71b
+	//TODO: VFMSUBADD213PD (R11), X9, X11   // c442b1a71b
+	//TODO: VFMSUBADD213PD X2, X9, X11      // c462b1a7da
+	//TODO: VFMSUBADD213PD X11, X9, X11     // c442b1a7db
+	//TODO: VFMSUBADD213PD (BX), Y15, Y2    // c4e285a713
+	//TODO: VFMSUBADD213PD (R11), Y15, Y2   // c4c285a713
+	//TODO: VFMSUBADD213PD Y2, Y15, Y2      // c4e285a7d2
+	//TODO: VFMSUBADD213PD Y11, Y15, Y2     // c4c285a7d3
+	//TODO: VFMSUBADD213PD (BX), Y15, Y11   // c46285a71b
+	//TODO: VFMSUBADD213PD (R11), Y15, Y11  // c44285a71b
+	//TODO: VFMSUBADD213PD Y2, Y15, Y11     // c46285a7da
+	//TODO: VFMSUBADD213PD Y11, Y15, Y11    // c44285a7db
+	//TODO: VFMSUBADD213PS (BX), X9, X2     // c4e231a713
+	//TODO: VFMSUBADD213PS (R11), X9, X2    // c4c231a713
+	//TODO: VFMSUBADD213PS X2, X9, X2       // c4e231a7d2
+	//TODO: VFMSUBADD213PS X11, X9, X2      // c4c231a7d3
+	//TODO: VFMSUBADD213PS (BX), X9, X11    // c46231a71b
+	//TODO: VFMSUBADD213PS (R11), X9, X11   // c44231a71b
+	//TODO: VFMSUBADD213PS X2, X9, X11      // c46231a7da
+	//TODO: VFMSUBADD213PS X11, X9, X11     // c44231a7db
+	//TODO: VFMSUBADD213PS (BX), Y15, Y2    // c4e205a713
+	//TODO: VFMSUBADD213PS (R11), Y15, Y2   // c4c205a713
+	//TODO: VFMSUBADD213PS Y2, Y15, Y2      // c4e205a7d2
+	//TODO: VFMSUBADD213PS Y11, Y15, Y2     // c4c205a7d3
+	//TODO: VFMSUBADD213PS (BX), Y15, Y11   // c46205a71b
+	//TODO: VFMSUBADD213PS (R11), Y15, Y11  // c44205a71b
+	//TODO: VFMSUBADD213PS Y2, Y15, Y11     // c46205a7da
+	//TODO: VFMSUBADD213PS Y11, Y15, Y11    // c44205a7db
+	//TODO: VFMSUBADD231PD (BX), X9, X2     // c4e2b1b713
+	//TODO: VFMSUBADD231PD (R11), X9, X2    // c4c2b1b713
+	//TODO: VFMSUBADD231PD X2, X9, X2       // c4e2b1b7d2
+	//TODO: VFMSUBADD231PD X11, X9, X2      // c4c2b1b7d3
+	//TODO: VFMSUBADD231PD (BX), X9, X11    // c462b1b71b
+	//TODO: VFMSUBADD231PD (R11), X9, X11   // c442b1b71b
+	//TODO: VFMSUBADD231PD X2, X9, X11      // c462b1b7da
+	//TODO: VFMSUBADD231PD X11, X9, X11     // c442b1b7db
+	//TODO: VFMSUBADD231PD (BX), Y15, Y2    // c4e285b713
+	//TODO: VFMSUBADD231PD (R11), Y15, Y2   // c4c285b713
+	//TODO: VFMSUBADD231PD Y2, Y15, Y2      // c4e285b7d2
+	//TODO: VFMSUBADD231PD Y11, Y15, Y2     // c4c285b7d3
+	//TODO: VFMSUBADD231PD (BX), Y15, Y11   // c46285b71b
+	//TODO: VFMSUBADD231PD (R11), Y15, Y11  // c44285b71b
+	//TODO: VFMSUBADD231PD Y2, Y15, Y11     // c46285b7da
+	//TODO: VFMSUBADD231PD Y11, Y15, Y11    // c44285b7db
+	//TODO: VFMSUBADD231PS (BX), X9, X2     // c4e231b713
+	//TODO: VFMSUBADD231PS (R11), X9, X2    // c4c231b713
+	//TODO: VFMSUBADD231PS X2, X9, X2       // c4e231b7d2
+	//TODO: VFMSUBADD231PS X11, X9, X2      // c4c231b7d3
+	//TODO: VFMSUBADD231PS (BX), X9, X11    // c46231b71b
+	//TODO: VFMSUBADD231PS (R11), X9, X11   // c44231b71b
+	//TODO: VFMSUBADD231PS X2, X9, X11      // c46231b7da
+	//TODO: VFMSUBADD231PS X11, X9, X11     // c44231b7db
+	//TODO: VFMSUBADD231PS (BX), Y15, Y2    // c4e205b713
+	//TODO: VFMSUBADD231PS (R11), Y15, Y2   // c4c205b713
+	//TODO: VFMSUBADD231PS Y2, Y15, Y2      // c4e205b7d2
+	//TODO: VFMSUBADD231PS Y11, Y15, Y2     // c4c205b7d3
+	//TODO: VFMSUBADD231PS (BX), Y15, Y11   // c46205b71b
+	//TODO: VFMSUBADD231PS (R11), Y15, Y11  // c44205b71b
+	//TODO: VFMSUBADD231PS Y2, Y15, Y11     // c46205b7da
+	//TODO: VFMSUBADD231PS Y11, Y15, Y11    // c44205b7db
+	//TODO: VFNMADD132PD (BX), X9, X2       // c4e2b19c13
+	//TODO: VFNMADD132PD (R11), X9, X2      // c4c2b19c13
+	//TODO: VFNMADD132PD X2, X9, X2         // c4e2b19cd2
+	//TODO: VFNMADD132PD X11, X9, X2        // c4c2b19cd3
+	//TODO: VFNMADD132PD (BX), X9, X11      // c462b19c1b
+	//TODO: VFNMADD132PD (R11), X9, X11     // c442b19c1b
+	//TODO: VFNMADD132PD X2, X9, X11        // c462b19cda
+	//TODO: VFNMADD132PD X11, X9, X11       // c442b19cdb
+	//TODO: VFNMADD132PD (BX), Y15, Y2      // c4e2859c13
+	//TODO: VFNMADD132PD (R11), Y15, Y2     // c4c2859c13
+	//TODO: VFNMADD132PD Y2, Y15, Y2        // c4e2859cd2
+	//TODO: VFNMADD132PD Y11, Y15, Y2       // c4c2859cd3
+	//TODO: VFNMADD132PD (BX), Y15, Y11     // c462859c1b
+	//TODO: VFNMADD132PD (R11), Y15, Y11    // c442859c1b
+	//TODO: VFNMADD132PD Y2, Y15, Y11       // c462859cda
+	//TODO: VFNMADD132PD Y11, Y15, Y11      // c442859cdb
+	//TODO: VFNMADD132PS (BX), X9, X2       // c4e2319c13
+	//TODO: VFNMADD132PS (R11), X9, X2      // c4c2319c13
+	//TODO: VFNMADD132PS X2, X9, X2         // c4e2319cd2
+	//TODO: VFNMADD132PS X11, X9, X2        // c4c2319cd3
+	//TODO: VFNMADD132PS (BX), X9, X11      // c462319c1b
+	//TODO: VFNMADD132PS (R11), X9, X11     // c442319c1b
+	//TODO: VFNMADD132PS X2, X9, X11        // c462319cda
+	//TODO: VFNMADD132PS X11, X9, X11       // c442319cdb
+	//TODO: VFNMADD132PS (BX), Y15, Y2      // c4e2059c13
+	//TODO: VFNMADD132PS (R11), Y15, Y2     // c4c2059c13
+	//TODO: VFNMADD132PS Y2, Y15, Y2        // c4e2059cd2
+	//TODO: VFNMADD132PS Y11, Y15, Y2       // c4c2059cd3
+	//TODO: VFNMADD132PS (BX), Y15, Y11     // c462059c1b
+	//TODO: VFNMADD132PS (R11), Y15, Y11    // c442059c1b
+	//TODO: VFNMADD132PS Y2, Y15, Y11       // c462059cda
+	//TODO: VFNMADD132PS Y11, Y15, Y11      // c442059cdb
+	//TODO: VFNMADD132SD (BX), X9, X2       // c4e2b19d13
+	//TODO: VFNMADD132SD (R11), X9, X2      // c4c2b19d13
+	//TODO: VFNMADD132SD X2, X9, X2         // c4e2b19dd2
+	//TODO: VFNMADD132SD X11, X9, X2        // c4c2b19dd3
+	//TODO: VFNMADD132SD (BX), X9, X11      // c462b19d1b
+	//TODO: VFNMADD132SD (R11), X9, X11     // c442b19d1b
+	//TODO: VFNMADD132SD X2, X9, X11        // c462b19dda
+	//TODO: VFNMADD132SD X11, X9, X11       // c442b19ddb
+	//TODO: VFNMADD132SS (BX), X9, X2       // c4e2319d13
+	//TODO: VFNMADD132SS (R11), X9, X2      // c4c2319d13
+	//TODO: VFNMADD132SS X2, X9, X2         // c4e2319dd2
+	//TODO: VFNMADD132SS X11, X9, X2        // c4c2319dd3
+	//TODO: VFNMADD132SS (BX), X9, X11      // c462319d1b
+	//TODO: VFNMADD132SS (R11), X9, X11     // c442319d1b
+	//TODO: VFNMADD132SS X2, X9, X11        // c462319dda
+	//TODO: VFNMADD132SS X11, X9, X11       // c442319ddb
+	//TODO: VFNMADD213PD (BX), X9, X2       // c4e2b1ac13
+	//TODO: VFNMADD213PD (R11), X9, X2      // c4c2b1ac13
+	//TODO: VFNMADD213PD X2, X9, X2         // c4e2b1acd2
+	//TODO: VFNMADD213PD X11, X9, X2        // c4c2b1acd3
+	//TODO: VFNMADD213PD (BX), X9, X11      // c462b1ac1b
+	//TODO: VFNMADD213PD (R11), X9, X11     // c442b1ac1b
+	//TODO: VFNMADD213PD X2, X9, X11        // c462b1acda
+	//TODO: VFNMADD213PD X11, X9, X11       // c442b1acdb
+	//TODO: VFNMADD213PD (BX), Y15, Y2      // c4e285ac13
+	//TODO: VFNMADD213PD (R11), Y15, Y2     // c4c285ac13
+	//TODO: VFNMADD213PD Y2, Y15, Y2        // c4e285acd2
+	//TODO: VFNMADD213PD Y11, Y15, Y2       // c4c285acd3
+	//TODO: VFNMADD213PD (BX), Y15, Y11     // c46285ac1b
+	//TODO: VFNMADD213PD (R11), Y15, Y11    // c44285ac1b
+	//TODO: VFNMADD213PD Y2, Y15, Y11       // c46285acda
+	//TODO: VFNMADD213PD Y11, Y15, Y11      // c44285acdb
+	//TODO: VFNMADD213PS (BX), X9, X2       // c4e231ac13
+	//TODO: VFNMADD213PS (R11), X9, X2      // c4c231ac13
+	//TODO: VFNMADD213PS X2, X9, X2         // c4e231acd2
+	//TODO: VFNMADD213PS X11, X9, X2        // c4c231acd3
+	//TODO: VFNMADD213PS (BX), X9, X11      // c46231ac1b
+	//TODO: VFNMADD213PS (R11), X9, X11     // c44231ac1b
+	//TODO: VFNMADD213PS X2, X9, X11        // c46231acda
+	//TODO: VFNMADD213PS X11, X9, X11       // c44231acdb
+	//TODO: VFNMADD213PS (BX), Y15, Y2      // c4e205ac13
+	//TODO: VFNMADD213PS (R11), Y15, Y2     // c4c205ac13
+	//TODO: VFNMADD213PS Y2, Y15, Y2        // c4e205acd2
+	//TODO: VFNMADD213PS Y11, Y15, Y2       // c4c205acd3
+	//TODO: VFNMADD213PS (BX), Y15, Y11     // c46205ac1b
+	//TODO: VFNMADD213PS (R11), Y15, Y11    // c44205ac1b
+	//TODO: VFNMADD213PS Y2, Y15, Y11       // c46205acda
+	//TODO: VFNMADD213PS Y11, Y15, Y11      // c44205acdb
+	//TODO: VFNMADD213SD (BX), X9, X2       // c4e2b1ad13
+	//TODO: VFNMADD213SD (R11), X9, X2      // c4c2b1ad13
+	//TODO: VFNMADD213SD X2, X9, X2         // c4e2b1add2
+	//TODO: VFNMADD213SD X11, X9, X2        // c4c2b1add3
+	//TODO: VFNMADD213SD (BX), X9, X11      // c462b1ad1b
+	//TODO: VFNMADD213SD (R11), X9, X11     // c442b1ad1b
+	//TODO: VFNMADD213SD X2, X9, X11        // c462b1adda
+	//TODO: VFNMADD213SD X11, X9, X11       // c442b1addb
+	//TODO: VFNMADD213SS (BX), X9, X2       // c4e231ad13
+	//TODO: VFNMADD213SS (R11), X9, X2      // c4c231ad13
+	//TODO: VFNMADD213SS X2, X9, X2         // c4e231add2
+	//TODO: VFNMADD213SS X11, X9, X2        // c4c231add3
+	//TODO: VFNMADD213SS (BX), X9, X11      // c46231ad1b
+	//TODO: VFNMADD213SS (R11), X9, X11     // c44231ad1b
+	//TODO: VFNMADD213SS X2, X9, X11        // c46231adda
+	//TODO: VFNMADD213SS X11, X9, X11       // c44231addb
+	//TODO: VFNMADD231PD (BX), X9, X2       // c4e2b1bc13
+	//TODO: VFNMADD231PD (R11), X9, X2      // c4c2b1bc13
+	//TODO: VFNMADD231PD X2, X9, X2         // c4e2b1bcd2
+	//TODO: VFNMADD231PD X11, X9, X2        // c4c2b1bcd3
+	//TODO: VFNMADD231PD (BX), X9, X11      // c462b1bc1b
+	//TODO: VFNMADD231PD (R11), X9, X11     // c442b1bc1b
+	//TODO: VFNMADD231PD X2, X9, X11        // c462b1bcda
+	//TODO: VFNMADD231PD X11, X9, X11       // c442b1bcdb
+	//TODO: VFNMADD231PD (BX), Y15, Y2      // c4e285bc13
+	//TODO: VFNMADD231PD (R11), Y15, Y2     // c4c285bc13
+	//TODO: VFNMADD231PD Y2, Y15, Y2        // c4e285bcd2
+	//TODO: VFNMADD231PD Y11, Y15, Y2       // c4c285bcd3
+	//TODO: VFNMADD231PD (BX), Y15, Y11     // c46285bc1b
+	//TODO: VFNMADD231PD (R11), Y15, Y11    // c44285bc1b
+	//TODO: VFNMADD231PD Y2, Y15, Y11       // c46285bcda
+	//TODO: VFNMADD231PD Y11, Y15, Y11      // c44285bcdb
+	//TODO: VFNMADD231PS (BX), X9, X2       // c4e231bc13
+	//TODO: VFNMADD231PS (R11), X9, X2      // c4c231bc13
+	//TODO: VFNMADD231PS X2, X9, X2         // c4e231bcd2
+	//TODO: VFNMADD231PS X11, X9, X2        // c4c231bcd3
+	//TODO: VFNMADD231PS (BX), X9, X11      // c46231bc1b
+	//TODO: VFNMADD231PS (R11), X9, X11     // c44231bc1b
+	//TODO: VFNMADD231PS X2, X9, X11        // c46231bcda
+	//TODO: VFNMADD231PS X11, X9, X11       // c44231bcdb
+	//TODO: VFNMADD231PS (BX), Y15, Y2      // c4e205bc13
+	//TODO: VFNMADD231PS (R11), Y15, Y2     // c4c205bc13
+	//TODO: VFNMADD231PS Y2, Y15, Y2        // c4e205bcd2
+	//TODO: VFNMADD231PS Y11, Y15, Y2       // c4c205bcd3
+	//TODO: VFNMADD231PS (BX), Y15, Y11     // c46205bc1b
+	//TODO: VFNMADD231PS (R11), Y15, Y11    // c44205bc1b
+	//TODO: VFNMADD231PS Y2, Y15, Y11       // c46205bcda
+	//TODO: VFNMADD231PS Y11, Y15, Y11      // c44205bcdb
+	//TODO: VFNMADD231SD (BX), X9, X2       // c4e2b1bd13
+	//TODO: VFNMADD231SD (R11), X9, X2      // c4c2b1bd13
+	//TODO: VFNMADD231SD X2, X9, X2         // c4e2b1bdd2
+	//TODO: VFNMADD231SD X11, X9, X2        // c4c2b1bdd3
+	//TODO: VFNMADD231SD (BX), X9, X11      // c462b1bd1b
+	//TODO: VFNMADD231SD (R11), X9, X11     // c442b1bd1b
+	//TODO: VFNMADD231SD X2, X9, X11        // c462b1bdda
+	//TODO: VFNMADD231SD X11, X9, X11       // c442b1bddb
+	//TODO: VFNMADD231SS (BX), X9, X2       // c4e231bd13
+	//TODO: VFNMADD231SS (R11), X9, X2      // c4c231bd13
+	//TODO: VFNMADD231SS X2, X9, X2         // c4e231bdd2
+	//TODO: VFNMADD231SS X11, X9, X2        // c4c231bdd3
+	//TODO: VFNMADD231SS (BX), X9, X11      // c46231bd1b
+	//TODO: VFNMADD231SS (R11), X9, X11     // c44231bd1b
+	//TODO: VFNMADD231SS X2, X9, X11        // c46231bdda
+	//TODO: VFNMADD231SS X11, X9, X11       // c44231bddb
+	//TODO: VFNMSUB132PD (BX), X9, X2       // c4e2b19e13
+	//TODO: VFNMSUB132PD (R11), X9, X2      // c4c2b19e13
+	//TODO: VFNMSUB132PD X2, X9, X2         // c4e2b19ed2
+	//TODO: VFNMSUB132PD X11, X9, X2        // c4c2b19ed3
+	//TODO: VFNMSUB132PD (BX), X9, X11      // c462b19e1b
+	//TODO: VFNMSUB132PD (R11), X9, X11     // c442b19e1b
+	//TODO: VFNMSUB132PD X2, X9, X11        // c462b19eda
+	//TODO: VFNMSUB132PD X11, X9, X11       // c442b19edb
+	//TODO: VFNMSUB132PD (BX), Y15, Y2      // c4e2859e13
+	//TODO: VFNMSUB132PD (R11), Y15, Y2     // c4c2859e13
+	//TODO: VFNMSUB132PD Y2, Y15, Y2        // c4e2859ed2
+	//TODO: VFNMSUB132PD Y11, Y15, Y2       // c4c2859ed3
+	//TODO: VFNMSUB132PD (BX), Y15, Y11     // c462859e1b
+	//TODO: VFNMSUB132PD (R11), Y15, Y11    // c442859e1b
+	//TODO: VFNMSUB132PD Y2, Y15, Y11       // c462859eda
+	//TODO: VFNMSUB132PD Y11, Y15, Y11      // c442859edb
+	//TODO: VFNMSUB132PS (BX), X9, X2       // c4e2319e13
+	//TODO: VFNMSUB132PS (R11), X9, X2      // c4c2319e13
+	//TODO: VFNMSUB132PS X2, X9, X2         // c4e2319ed2
+	//TODO: VFNMSUB132PS X11, X9, X2        // c4c2319ed3
+	//TODO: VFNMSUB132PS (BX), X9, X11      // c462319e1b
+	//TODO: VFNMSUB132PS (R11), X9, X11     // c442319e1b
+	//TODO: VFNMSUB132PS X2, X9, X11        // c462319eda
+	//TODO: VFNMSUB132PS X11, X9, X11       // c442319edb
+	//TODO: VFNMSUB132PS (BX), Y15, Y2      // c4e2059e13
+	//TODO: VFNMSUB132PS (R11), Y15, Y2     // c4c2059e13
+	//TODO: VFNMSUB132PS Y2, Y15, Y2        // c4e2059ed2
+	//TODO: VFNMSUB132PS Y11, Y15, Y2       // c4c2059ed3
+	//TODO: VFNMSUB132PS (BX), Y15, Y11     // c462059e1b
+	//TODO: VFNMSUB132PS (R11), Y15, Y11    // c442059e1b
+	//TODO: VFNMSUB132PS Y2, Y15, Y11       // c462059eda
+	//TODO: VFNMSUB132PS Y11, Y15, Y11      // c442059edb
+	//TODO: VFNMSUB132SD (BX), X9, X2       // c4e2b19f13
+	//TODO: VFNMSUB132SD (R11), X9, X2      // c4c2b19f13
+	//TODO: VFNMSUB132SD X2, X9, X2         // c4e2b19fd2
+	//TODO: VFNMSUB132SD X11, X9, X2        // c4c2b19fd3
+	//TODO: VFNMSUB132SD (BX), X9, X11      // c462b19f1b
+	//TODO: VFNMSUB132SD (R11), X9, X11     // c442b19f1b
+	//TODO: VFNMSUB132SD X2, X9, X11        // c462b19fda
+	//TODO: VFNMSUB132SD X11, X9, X11       // c442b19fdb
+	//TODO: VFNMSUB132SS (BX), X9, X2       // c4e2319f13
+	//TODO: VFNMSUB132SS (R11), X9, X2      // c4c2319f13
+	//TODO: VFNMSUB132SS X2, X9, X2         // c4e2319fd2
+	//TODO: VFNMSUB132SS X11, X9, X2        // c4c2319fd3
+	//TODO: VFNMSUB132SS (BX), X9, X11      // c462319f1b
+	//TODO: VFNMSUB132SS (R11), X9, X11     // c442319f1b
+	//TODO: VFNMSUB132SS X2, X9, X11        // c462319fda
+	//TODO: VFNMSUB132SS X11, X9, X11       // c442319fdb
+	//TODO: VFNMSUB213PD (BX), X9, X2       // c4e2b1ae13
+	//TODO: VFNMSUB213PD (R11), X9, X2      // c4c2b1ae13
+	//TODO: VFNMSUB213PD X2, X9, X2         // c4e2b1aed2
+	//TODO: VFNMSUB213PD X11, X9, X2        // c4c2b1aed3
+	//TODO: VFNMSUB213PD (BX), X9, X11      // c462b1ae1b
+	//TODO: VFNMSUB213PD (R11), X9, X11     // c442b1ae1b
+	//TODO: VFNMSUB213PD X2, X9, X11        // c462b1aeda
+	//TODO: VFNMSUB213PD X11, X9, X11       // c442b1aedb
+	//TODO: VFNMSUB213PD (BX), Y15, Y2      // c4e285ae13
+	//TODO: VFNMSUB213PD (R11), Y15, Y2     // c4c285ae13
+	//TODO: VFNMSUB213PD Y2, Y15, Y2        // c4e285aed2
+	//TODO: VFNMSUB213PD Y11, Y15, Y2       // c4c285aed3
+	//TODO: VFNMSUB213PD (BX), Y15, Y11     // c46285ae1b
+	//TODO: VFNMSUB213PD (R11), Y15, Y11    // c44285ae1b
+	//TODO: VFNMSUB213PD Y2, Y15, Y11       // c46285aeda
+	//TODO: VFNMSUB213PD Y11, Y15, Y11      // c44285aedb
+	//TODO: VFNMSUB213PS (BX), X9, X2       // c4e231ae13
+	//TODO: VFNMSUB213PS (R11), X9, X2      // c4c231ae13
+	//TODO: VFNMSUB213PS X2, X9, X2         // c4e231aed2
+	//TODO: VFNMSUB213PS X11, X9, X2        // c4c231aed3
+	//TODO: VFNMSUB213PS (BX), X9, X11      // c46231ae1b
+	//TODO: VFNMSUB213PS (R11), X9, X11     // c44231ae1b
+	//TODO: VFNMSUB213PS X2, X9, X11        // c46231aeda
+	//TODO: VFNMSUB213PS X11, X9, X11       // c44231aedb
+	//TODO: VFNMSUB213PS (BX), Y15, Y2      // c4e205ae13
+	//TODO: VFNMSUB213PS (R11), Y15, Y2     // c4c205ae13
+	//TODO: VFNMSUB213PS Y2, Y15, Y2        // c4e205aed2
+	//TODO: VFNMSUB213PS Y11, Y15, Y2       // c4c205aed3
+	//TODO: VFNMSUB213PS (BX), Y15, Y11     // c46205ae1b
+	//TODO: VFNMSUB213PS (R11), Y15, Y11    // c44205ae1b
+	//TODO: VFNMSUB213PS Y2, Y15, Y11       // c46205aeda
+	//TODO: VFNMSUB213PS Y11, Y15, Y11      // c44205aedb
+	//TODO: VFNMSUB213SD (BX), X9, X2       // c4e2b1af13
+	//TODO: VFNMSUB213SD (R11), X9, X2      // c4c2b1af13
+	//TODO: VFNMSUB213SD X2, X9, X2         // c4e2b1afd2
+	//TODO: VFNMSUB213SD X11, X9, X2        // c4c2b1afd3
+	//TODO: VFNMSUB213SD (BX), X9, X11      // c462b1af1b
+	//TODO: VFNMSUB213SD (R11), X9, X11     // c442b1af1b
+	//TODO: VFNMSUB213SD X2, X9, X11        // c462b1afda
+	//TODO: VFNMSUB213SD X11, X9, X11       // c442b1afdb
+	//TODO: VFNMSUB213SS (BX), X9, X2       // c4e231af13
+	//TODO: VFNMSUB213SS (R11), X9, X2      // c4c231af13
+	//TODO: VFNMSUB213SS X2, X9, X2         // c4e231afd2
+	//TODO: VFNMSUB213SS X11, X9, X2        // c4c231afd3
+	//TODO: VFNMSUB213SS (BX), X9, X11      // c46231af1b
+	//TODO: VFNMSUB213SS (R11), X9, X11     // c44231af1b
+	//TODO: VFNMSUB213SS X2, X9, X11        // c46231afda
+	//TODO: VFNMSUB213SS X11, X9, X11       // c44231afdb
+	//TODO: VFNMSUB231PD (BX), X9, X2       // c4e2b1be13
+	//TODO: VFNMSUB231PD (R11), X9, X2      // c4c2b1be13
+	//TODO: VFNMSUB231PD X2, X9, X2         // c4e2b1bed2
+	//TODO: VFNMSUB231PD X11, X9, X2        // c4c2b1bed3
+	//TODO: VFNMSUB231PD (BX), X9, X11      // c462b1be1b
+	//TODO: VFNMSUB231PD (R11), X9, X11     // c442b1be1b
+	//TODO: VFNMSUB231PD X2, X9, X11        // c462b1beda
+	//TODO: VFNMSUB231PD X11, X9, X11       // c442b1bedb
+	//TODO: VFNMSUB231PD (BX), Y15, Y2      // c4e285be13
+	//TODO: VFNMSUB231PD (R11), Y15, Y2     // c4c285be13
+	//TODO: VFNMSUB231PD Y2, Y15, Y2        // c4e285bed2
+	//TODO: VFNMSUB231PD Y11, Y15, Y2       // c4c285bed3
+	//TODO: VFNMSUB231PD (BX), Y15, Y11     // c46285be1b
+	//TODO: VFNMSUB231PD (R11), Y15, Y11    // c44285be1b
+	//TODO: VFNMSUB231PD Y2, Y15, Y11       // c46285beda
+	//TODO: VFNMSUB231PD Y11, Y15, Y11      // c44285bedb
+	//TODO: VFNMSUB231PS (BX), X9, X2       // c4e231be13
+	//TODO: VFNMSUB231PS (R11), X9, X2      // c4c231be13
+	//TODO: VFNMSUB231PS X2, X9, X2         // c4e231bed2
+	//TODO: VFNMSUB231PS X11, X9, X2        // c4c231bed3
+	//TODO: VFNMSUB231PS (BX), X9, X11      // c46231be1b
+	//TODO: VFNMSUB231PS (R11), X9, X11     // c44231be1b
+	//TODO: VFNMSUB231PS X2, X9, X11        // c46231beda
+	//TODO: VFNMSUB231PS X11, X9, X11       // c44231bedb
+	//TODO: VFNMSUB231PS (BX), Y15, Y2      // c4e205be13
+	//TODO: VFNMSUB231PS (R11), Y15, Y2     // c4c205be13
+	//TODO: VFNMSUB231PS Y2, Y15, Y2        // c4e205bed2
+	//TODO: VFNMSUB231PS Y11, Y15, Y2       // c4c205bed3
+	//TODO: VFNMSUB231PS (BX), Y15, Y11     // c46205be1b
+	//TODO: VFNMSUB231PS (R11), Y15, Y11    // c44205be1b
+	//TODO: VFNMSUB231PS Y2, Y15, Y11       // c46205beda
+	//TODO: VFNMSUB231PS Y11, Y15, Y11      // c44205bedb
+	//TODO: VFNMSUB231SD (BX), X9, X2       // c4e2b1bf13
+	//TODO: VFNMSUB231SD (R11), X9, X2      // c4c2b1bf13
+	//TODO: VFNMSUB231SD X2, X9, X2         // c4e2b1bfd2
+	//TODO: VFNMSUB231SD X11, X9, X2        // c4c2b1bfd3
+	//TODO: VFNMSUB231SD (BX), X9, X11      // c462b1bf1b
+	//TODO: VFNMSUB231SD (R11), X9, X11     // c442b1bf1b
+	//TODO: VFNMSUB231SD X2, X9, X11        // c462b1bfda
+	//TODO: VFNMSUB231SD X11, X9, X11       // c442b1bfdb
+	//TODO: VFNMSUB231SS (BX), X9, X2       // c4e231bf13
+	//TODO: VFNMSUB231SS (R11), X9, X2      // c4c231bf13
+	//TODO: VFNMSUB231SS X2, X9, X2         // c4e231bfd2
+	//TODO: VFNMSUB231SS X11, X9, X2        // c4c231bfd3
+	//TODO: VFNMSUB231SS (BX), X9, X11      // c46231bf1b
+	//TODO: VFNMSUB231SS (R11), X9, X11     // c44231bf1b
+	//TODO: VFNMSUB231SS X2, X9, X11        // c46231bfda
+	//TODO: VFNMSUB231SS X11, X9, X11       // c44231bfdb
+	//TODO: VHADDPD (BX), X9, X2            // c4e1317c13 or c5b17c13
+	//TODO: VHADDPD (R11), X9, X2           // c4c1317c13
+	//TODO: VHADDPD X2, X9, X2              // c4e1317cd2 or c5b17cd2
+	//TODO: VHADDPD X11, X9, X2             // c4c1317cd3
+	//TODO: VHADDPD (BX), X9, X11           // c461317c1b or c5317c1b
+	//TODO: VHADDPD (R11), X9, X11          // c441317c1b
+	//TODO: VHADDPD X2, X9, X11             // c461317cda or c5317cda
+	//TODO: VHADDPD X11, X9, X11            // c441317cdb
+	//TODO: VHADDPD (BX), Y15, Y2           // c4e1057c13 or c5857c13
+	//TODO: VHADDPD (R11), Y15, Y2          // c4c1057c13
+	//TODO: VHADDPD Y2, Y15, Y2             // c4e1057cd2 or c5857cd2
+	//TODO: VHADDPD Y11, Y15, Y2            // c4c1057cd3
+	//TODO: VHADDPD (BX), Y15, Y11          // c461057c1b or c5057c1b
+	//TODO: VHADDPD (R11), Y15, Y11         // c441057c1b
+	//TODO: VHADDPD Y2, Y15, Y11            // c461057cda or c5057cda
+	//TODO: VHADDPD Y11, Y15, Y11           // c441057cdb
+	//TODO: VHADDPS (BX), X9, X2            // c4e1337c13 or c5b37c13
+	//TODO: VHADDPS (R11), X9, X2           // c4c1337c13
+	//TODO: VHADDPS X2, X9, X2              // c4e1337cd2 or c5b37cd2
+	//TODO: VHADDPS X11, X9, X2             // c4c1337cd3
+	//TODO: VHADDPS (BX), X9, X11           // c461337c1b or c5337c1b
+	//TODO: VHADDPS (R11), X9, X11          // c441337c1b
+	//TODO: VHADDPS X2, X9, X11             // c461337cda or c5337cda
+	//TODO: VHADDPS X11, X9, X11            // c441337cdb
+	//TODO: VHADDPS (BX), Y15, Y2           // c4e1077c13 or c5877c13
+	//TODO: VHADDPS (R11), Y15, Y2          // c4c1077c13
+	//TODO: VHADDPS Y2, Y15, Y2             // c4e1077cd2 or c5877cd2
+	//TODO: VHADDPS Y11, Y15, Y2            // c4c1077cd3
+	//TODO: VHADDPS (BX), Y15, Y11          // c461077c1b or c5077c1b
+	//TODO: VHADDPS (R11), Y15, Y11         // c441077c1b
+	//TODO: VHADDPS Y2, Y15, Y11            // c461077cda or c5077cda
+	//TODO: VHADDPS Y11, Y15, Y11           // c441077cdb
+	//TODO: VHSUBPD (BX), X9, X2            // c4e1317d13 or c5b17d13
+	//TODO: VHSUBPD (R11), X9, X2           // c4c1317d13
+	//TODO: VHSUBPD X2, X9, X2              // c4e1317dd2 or c5b17dd2
+	//TODO: VHSUBPD X11, X9, X2             // c4c1317dd3
+	//TODO: VHSUBPD (BX), X9, X11           // c461317d1b or c5317d1b
+	//TODO: VHSUBPD (R11), X9, X11          // c441317d1b
+	//TODO: VHSUBPD X2, X9, X11             // c461317dda or c5317dda
+	//TODO: VHSUBPD X11, X9, X11            // c441317ddb
+	//TODO: VHSUBPD (BX), Y15, Y2           // c4e1057d13 or c5857d13
+	//TODO: VHSUBPD (R11), Y15, Y2          // c4c1057d13
+	//TODO: VHSUBPD Y2, Y15, Y2             // c4e1057dd2 or c5857dd2
+	//TODO: VHSUBPD Y11, Y15, Y2            // c4c1057dd3
+	//TODO: VHSUBPD (BX), Y15, Y11          // c461057d1b or c5057d1b
+	//TODO: VHSUBPD (R11), Y15, Y11         // c441057d1b
+	//TODO: VHSUBPD Y2, Y15, Y11            // c461057dda or c5057dda
+	//TODO: VHSUBPD Y11, Y15, Y11           // c441057ddb
+	//TODO: VHSUBPS (BX), X9, X2            // c4e1337d13 or c5b37d13
+	//TODO: VHSUBPS (R11), X9, X2           // c4c1337d13
+	//TODO: VHSUBPS X2, X9, X2              // c4e1337dd2 or c5b37dd2
+	//TODO: VHSUBPS X11, X9, X2             // c4c1337dd3
+	//TODO: VHSUBPS (BX), X9, X11           // c461337d1b or c5337d1b
+	//TODO: VHSUBPS (R11), X9, X11          // c441337d1b
+	//TODO: VHSUBPS X2, X9, X11             // c461337dda or c5337dda
+	//TODO: VHSUBPS X11, X9, X11            // c441337ddb
+	//TODO: VHSUBPS (BX), Y15, Y2           // c4e1077d13 or c5877d13
+	//TODO: VHSUBPS (R11), Y15, Y2          // c4c1077d13
+	//TODO: VHSUBPS Y2, Y15, Y2             // c4e1077dd2 or c5877dd2
+	//TODO: VHSUBPS Y11, Y15, Y2            // c4c1077dd3
+	//TODO: VHSUBPS (BX), Y15, Y11          // c461077d1b or c5077d1b
+	//TODO: VHSUBPS (R11), Y15, Y11         // c441077d1b
+	//TODO: VHSUBPS Y2, Y15, Y11            // c461077dda or c5077dda
+	//TODO: VHSUBPS Y11, Y15, Y11           // c441077ddb
+	//TODO: VINSERTF128 $7, (BX), Y15, Y2   // c4e305181307
+	//TODO: VINSERTF128 $7, (R11), Y15, Y2  // c4c305181307
+	//TODO: VINSERTF128 $7, X2, Y15, Y2     // c4e30518d207
+	//TODO: VINSERTF128 $7, X11, Y15, Y2    // c4c30518d307
+	//TODO: VINSERTF128 $7, (BX), Y15, Y11  // c46305181b07
+	//TODO: VINSERTF128 $7, (R11), Y15, Y11 // c44305181b07
+	//TODO: VINSERTF128 $7, X2, Y15, Y11    // c4630518da07
+	//TODO: VINSERTF128 $7, X11, Y15, Y11   // c4430518db07
+	//TODO: VINSERTI128 $7, (BX), Y15, Y2   // c4e305381307
+	//TODO: VINSERTI128 $7, (R11), Y15, Y2  // c4c305381307
+	//TODO: VINSERTI128 $7, X2, Y15, Y2     // c4e30538d207
+	//TODO: VINSERTI128 $7, X11, Y15, Y2    // c4c30538d307
+	//TODO: VINSERTI128 $7, (BX), Y15, Y11  // c46305381b07
+	//TODO: VINSERTI128 $7, (R11), Y15, Y11 // c44305381b07
+	//TODO: VINSERTI128 $7, X2, Y15, Y11    // c4630538da07
+	//TODO: VINSERTI128 $7, X11, Y15, Y11   // c4430538db07
+	//TODO: VINSERTPS $7, (BX), X9, X2      // c4e331211307
+	//TODO: VINSERTPS $7, (R11), X9, X2     // c4c331211307
+	//TODO: VINSERTPS $7, X2, X9, X2        // c4e33121d207
+	//TODO: VINSERTPS $7, X11, X9, X2       // c4c33121d307
+	//TODO: VINSERTPS $7, (BX), X9, X11     // c46331211b07
+	//TODO: VINSERTPS $7, (R11), X9, X11    // c44331211b07
+	//TODO: VINSERTPS $7, X2, X9, X11       // c4633121da07
+	//TODO: VINSERTPS $7, X11, X9, X11      // c4433121db07
+	//TODO: VLDDQU (BX), X2                 // c4e17bf013 or c5fbf013
+	//TODO: VLDDQU (R11), X2                // c4c17bf013
+	//TODO: VLDDQU (BX), X11                // c4617bf01b or c57bf01b
+	//TODO: VLDDQU (R11), X11               // c4417bf01b
+	//TODO: VLDDQU (BX), Y2                 // c4e17ff013 or c5fff013
+	//TODO: VLDDQU (R11), Y2                // c4c17ff013
+	//TODO: VLDDQU (BX), Y11                // c4617ff01b or c57ff01b
+	//TODO: VLDDQU (R11), Y11               // c4417ff01b
+	//TODO: VLDMXCSR (BX)                   // c4e178ae13 or c5f8ae13
+	//TODO: VLDMXCSR (R11)                  // c4c178ae13
+	//TODO: VMASKMOVDQU X2, X2              // c4e179f7d2 or c5f9f7d2
+	//TODO: VMASKMOVDQU X11, X2             // c4c179f7d3
+	//TODO: VMASKMOVDQU X2, X11             // c46179f7da or c579f7da
+	//TODO: VMASKMOVDQU X11, X11            // c44179f7db
+	//TODO: VMASKMOVPD X2, X9, (BX)         // c4e2312f13
+	//TODO: VMASKMOVPD X11, X9, (BX)        // c462312f1b
+	//TODO: VMASKMOVPD X2, X9, (R11)        // c4c2312f13
+	//TODO: VMASKMOVPD X11, X9, (R11)       // c442312f1b
+	//TODO: VMASKMOVPD Y2, Y15, (BX)        // c4e2052f13
+	//TODO: VMASKMOVPD Y11, Y15, (BX)       // c462052f1b
+	//TODO: VMASKMOVPD Y2, Y15, (R11)       // c4c2052f13
+	//TODO: VMASKMOVPD Y11, Y15, (R11)      // c442052f1b
+	//TODO: VMASKMOVPD (BX), X9, X2         // c4e2312d13
+	//TODO: VMASKMOVPD (R11), X9, X2        // c4c2312d13
+	//TODO: VMASKMOVPD (BX), X9, X11        // c462312d1b
+	//TODO: VMASKMOVPD (R11), X9, X11       // c442312d1b
+	//TODO: VMASKMOVPD (BX), Y15, Y2        // c4e2052d13
+	//TODO: VMASKMOVPD (R11), Y15, Y2       // c4c2052d13
+	//TODO: VMASKMOVPD (BX), Y15, Y11       // c462052d1b
+	//TODO: VMASKMOVPD (R11), Y15, Y11      // c442052d1b
+	//TODO: VMASKMOVPS X2, X9, (BX)         // c4e2312e13
+	//TODO: VMASKMOVPS X11, X9, (BX)        // c462312e1b
+	//TODO: VMASKMOVPS X2, X9, (R11)        // c4c2312e13
+	//TODO: VMASKMOVPS X11, X9, (R11)       // c442312e1b
+	//TODO: VMASKMOVPS Y2, Y15, (BX)        // c4e2052e13
+	//TODO: VMASKMOVPS Y11, Y15, (BX)       // c462052e1b
+	//TODO: VMASKMOVPS Y2, Y15, (R11)       // c4c2052e13
+	//TODO: VMASKMOVPS Y11, Y15, (R11)      // c442052e1b
+	//TODO: VMASKMOVPS (BX), X9, X2         // c4e2312c13
+	//TODO: VMASKMOVPS (R11), X9, X2        // c4c2312c13
+	//TODO: VMASKMOVPS (BX), X9, X11        // c462312c1b
+	//TODO: VMASKMOVPS (R11), X9, X11       // c442312c1b
+	//TODO: VMASKMOVPS (BX), Y15, Y2        // c4e2052c13
+	//TODO: VMASKMOVPS (R11), Y15, Y2       // c4c2052c13
+	//TODO: VMASKMOVPS (BX), Y15, Y11       // c462052c1b
+	//TODO: VMASKMOVPS (R11), Y15, Y11      // c442052c1b
+	//TODO: VMAXPD (BX), X9, X2             // c4e1315f13 or c5b15f13
+	//TODO: VMAXPD (R11), X9, X2            // c4c1315f13
+	//TODO: VMAXPD X2, X9, X2               // c4e1315fd2 or c5b15fd2
+	//TODO: VMAXPD X11, X9, X2              // c4c1315fd3
+	//TODO: VMAXPD (BX), X9, X11            // c461315f1b or c5315f1b
+	//TODO: VMAXPD (R11), X9, X11           // c441315f1b
+	//TODO: VMAXPD X2, X9, X11              // c461315fda or c5315fda
+	//TODO: VMAXPD X11, X9, X11             // c441315fdb
+	//TODO: VMAXPD (BX), Y15, Y2            // c4e1055f13 or c5855f13
+	//TODO: VMAXPD (R11), Y15, Y2           // c4c1055f13
+	//TODO: VMAXPD Y2, Y15, Y2              // c4e1055fd2 or c5855fd2
+	//TODO: VMAXPD Y11, Y15, Y2             // c4c1055fd3
+	//TODO: VMAXPD (BX), Y15, Y11           // c461055f1b or c5055f1b
+	//TODO: VMAXPD (R11), Y15, Y11          // c441055f1b
+	//TODO: VMAXPD Y2, Y15, Y11             // c461055fda or c5055fda
+	//TODO: VMAXPD Y11, Y15, Y11            // c441055fdb
+	//TODO: VMAXPS (BX), X9, X2             // c4e1305f13 or c5b05f13
+	//TODO: VMAXPS (R11), X9, X2            // c4c1305f13
+	//TODO: VMAXPS X2, X9, X2               // c4e1305fd2 or c5b05fd2
+	//TODO: VMAXPS X11, X9, X2              // c4c1305fd3
+	//TODO: VMAXPS (BX), X9, X11            // c461305f1b or c5305f1b
+	//TODO: VMAXPS (R11), X9, X11           // c441305f1b
+	//TODO: VMAXPS X2, X9, X11              // c461305fda or c5305fda
+	//TODO: VMAXPS X11, X9, X11             // c441305fdb
+	//TODO: VMAXPS (BX), Y15, Y2            // c4e1045f13 or c5845f13
+	//TODO: VMAXPS (R11), Y15, Y2           // c4c1045f13
+	//TODO: VMAXPS Y2, Y15, Y2              // c4e1045fd2 or c5845fd2
+	//TODO: VMAXPS Y11, Y15, Y2             // c4c1045fd3
+	//TODO: VMAXPS (BX), Y15, Y11           // c461045f1b or c5045f1b
+	//TODO: VMAXPS (R11), Y15, Y11          // c441045f1b
+	//TODO: VMAXPS Y2, Y15, Y11             // c461045fda or c5045fda
+	//TODO: VMAXPS Y11, Y15, Y11            // c441045fdb
+	//TODO: VMAXSD (BX), X9, X2             // c4e1335f13 or c5b35f13
+	//TODO: VMAXSD (R11), X9, X2            // c4c1335f13
+	//TODO: VMAXSD X2, X9, X2               // c4e1335fd2 or c5b35fd2
+	//TODO: VMAXSD X11, X9, X2              // c4c1335fd3
+	//TODO: VMAXSD (BX), X9, X11            // c461335f1b or c5335f1b
+	//TODO: VMAXSD (R11), X9, X11           // c441335f1b
+	//TODO: VMAXSD X2, X9, X11              // c461335fda or c5335fda
+	//TODO: VMAXSD X11, X9, X11             // c441335fdb
+	//TODO: VMAXSS (BX), X9, X2             // c4e1325f13 or c5b25f13
+	//TODO: VMAXSS (R11), X9, X2            // c4c1325f13
+	//TODO: VMAXSS X2, X9, X2               // c4e1325fd2 or c5b25fd2
+	//TODO: VMAXSS X11, X9, X2              // c4c1325fd3
+	//TODO: VMAXSS (BX), X9, X11            // c461325f1b or c5325f1b
+	//TODO: VMAXSS (R11), X9, X11           // c441325f1b
+	//TODO: VMAXSS X2, X9, X11              // c461325fda or c5325fda
+	//TODO: VMAXSS X11, X9, X11             // c441325fdb
+	//TODO: VMINPD (BX), X9, X2             // c4e1315d13 or c5b15d13
+	//TODO: VMINPD (R11), X9, X2            // c4c1315d13
+	//TODO: VMINPD X2, X9, X2               // c4e1315dd2 or c5b15dd2
+	//TODO: VMINPD X11, X9, X2              // c4c1315dd3
+	//TODO: VMINPD (BX), X9, X11            // c461315d1b or c5315d1b
+	//TODO: VMINPD (R11), X9, X11           // c441315d1b
+	//TODO: VMINPD X2, X9, X11              // c461315dda or c5315dda
+	//TODO: VMINPD X11, X9, X11             // c441315ddb
+	//TODO: VMINPD (BX), Y15, Y2            // c4e1055d13 or c5855d13
+	//TODO: VMINPD (R11), Y15, Y2           // c4c1055d13
+	//TODO: VMINPD Y2, Y15, Y2              // c4e1055dd2 or c5855dd2
+	//TODO: VMINPD Y11, Y15, Y2             // c4c1055dd3
+	//TODO: VMINPD (BX), Y15, Y11           // c461055d1b or c5055d1b
+	//TODO: VMINPD (R11), Y15, Y11          // c441055d1b
+	//TODO: VMINPD Y2, Y15, Y11             // c461055dda or c5055dda
+	//TODO: VMINPD Y11, Y15, Y11            // c441055ddb
+	//TODO: VMINPS (BX), X9, X2             // c4e1305d13 or c5b05d13
+	//TODO: VMINPS (R11), X9, X2            // c4c1305d13
+	//TODO: VMINPS X2, X9, X2               // c4e1305dd2 or c5b05dd2
+	//TODO: VMINPS X11, X9, X2              // c4c1305dd3
+	//TODO: VMINPS (BX), X9, X11            // c461305d1b or c5305d1b
+	//TODO: VMINPS (R11), X9, X11           // c441305d1b
+	//TODO: VMINPS X2, X9, X11              // c461305dda or c5305dda
+	//TODO: VMINPS X11, X9, X11             // c441305ddb
+	//TODO: VMINPS (BX), Y15, Y2            // c4e1045d13 or c5845d13
+	//TODO: VMINPS (R11), Y15, Y2           // c4c1045d13
+	//TODO: VMINPS Y2, Y15, Y2              // c4e1045dd2 or c5845dd2
+	//TODO: VMINPS Y11, Y15, Y2             // c4c1045dd3
+	//TODO: VMINPS (BX), Y15, Y11           // c461045d1b or c5045d1b
+	//TODO: VMINPS (R11), Y15, Y11          // c441045d1b
+	//TODO: VMINPS Y2, Y15, Y11             // c461045dda or c5045dda
+	//TODO: VMINPS Y11, Y15, Y11            // c441045ddb
+	//TODO: VMINSD (BX), X9, X2             // c4e1335d13 or c5b35d13
+	//TODO: VMINSD (R11), X9, X2            // c4c1335d13
+	//TODO: VMINSD X2, X9, X2               // c4e1335dd2 or c5b35dd2
+	//TODO: VMINSD X11, X9, X2              // c4c1335dd3
+	//TODO: VMINSD (BX), X9, X11            // c461335d1b or c5335d1b
+	//TODO: VMINSD (R11), X9, X11           // c441335d1b
+	//TODO: VMINSD X2, X9, X11              // c461335dda or c5335dda
+	//TODO: VMINSD X11, X9, X11             // c441335ddb
+	//TODO: VMINSS (BX), X9, X2             // c4e1325d13 or c5b25d13
+	//TODO: VMINSS (R11), X9, X2            // c4c1325d13
+	//TODO: VMINSS X2, X9, X2               // c4e1325dd2 or c5b25dd2
+	//TODO: VMINSS X11, X9, X2              // c4c1325dd3
+	//TODO: VMINSS (BX), X9, X11            // c461325d1b or c5325d1b
+	//TODO: VMINSS (R11), X9, X11           // c441325d1b
+	//TODO: VMINSS X2, X9, X11              // c461325dda or c5325dda
+	//TODO: VMINSS X11, X9, X11             // c441325ddb
+	//TODO: VMOVAPD (BX), X2                // c4e1792813 or c5f92813
+	//TODO: VMOVAPD (R11), X2               // c4c1792813
+	//TODO: VMOVAPD X2, X2                  // c4e17928d2 or c5f928d2 or c4e17929d2 or c5f929d2
+	//TODO: VMOVAPD X11, X2                 // c4c17928d3 or c4617929da or c57929da
+	//TODO: VMOVAPD (BX), X11               // c46179281b or c579281b
+	//TODO: VMOVAPD (R11), X11              // c44179281b
+	//TODO: VMOVAPD X2, X11                 // c4617928da or c57928da or c4c17929d3
+	//TODO: VMOVAPD X11, X11                // c4417928db or c4417929db
+	//TODO: VMOVAPD X2, (BX)                // c4e1792913 or c5f92913
+	//TODO: VMOVAPD X11, (BX)               // c46179291b or c579291b
+	//TODO: VMOVAPD X2, (R11)               // c4c1792913
+	//TODO: VMOVAPD X11, (R11)              // c44179291b
+	//TODO: VMOVAPD (BX), Y2                // c4e17d2813 or c5fd2813
+	//TODO: VMOVAPD (R11), Y2               // c4c17d2813
+	//TODO: VMOVAPD Y2, Y2                  // c4e17d28d2 or c5fd28d2 or c4e17d29d2 or c5fd29d2
+	//TODO: VMOVAPD Y11, Y2                 // c4c17d28d3 or c4617d29da or c57d29da
+	//TODO: VMOVAPD (BX), Y11               // c4617d281b or c57d281b
+	//TODO: VMOVAPD (R11), Y11              // c4417d281b
+	//TODO: VMOVAPD Y2, Y11                 // c4617d28da or c57d28da or c4c17d29d3
+	//TODO: VMOVAPD Y11, Y11                // c4417d28db or c4417d29db
+	//TODO: VMOVAPD Y2, (BX)                // c4e17d2913 or c5fd2913
+	//TODO: VMOVAPD Y11, (BX)               // c4617d291b or c57d291b
+	//TODO: VMOVAPD Y2, (R11)               // c4c17d2913
+	//TODO: VMOVAPD Y11, (R11)              // c4417d291b
+	//TODO: VMOVAPS (BX), X2                // c4e1782813 or c5f82813
+	//TODO: VMOVAPS (R11), X2               // c4c1782813
+	//TODO: VMOVAPS X2, X2                  // c4e17828d2 or c5f828d2 or c4e17829d2 or c5f829d2
+	//TODO: VMOVAPS X11, X2                 // c4c17828d3 or c4617829da or c57829da
+	//TODO: VMOVAPS (BX), X11               // c46178281b or c578281b
+	//TODO: VMOVAPS (R11), X11              // c44178281b
+	//TODO: VMOVAPS X2, X11                 // c4617828da or c57828da or c4c17829d3
+	//TODO: VMOVAPS X11, X11                // c4417828db or c4417829db
+	//TODO: VMOVAPS X2, (BX)                // c4e1782913 or c5f82913
+	//TODO: VMOVAPS X11, (BX)               // c46178291b or c578291b
+	//TODO: VMOVAPS X2, (R11)               // c4c1782913
+	//TODO: VMOVAPS X11, (R11)              // c44178291b
+	//TODO: VMOVAPS (BX), Y2                // c4e17c2813 or c5fc2813
+	//TODO: VMOVAPS (R11), Y2               // c4c17c2813
+	//TODO: VMOVAPS Y2, Y2                  // c4e17c28d2 or c5fc28d2 or c4e17c29d2 or c5fc29d2
+	//TODO: VMOVAPS Y11, Y2                 // c4c17c28d3 or c4617c29da or c57c29da
+	//TODO: VMOVAPS (BX), Y11               // c4617c281b or c57c281b
+	//TODO: VMOVAPS (R11), Y11              // c4417c281b
+	//TODO: VMOVAPS Y2, Y11                 // c4617c28da or c57c28da or c4c17c29d3
+	//TODO: VMOVAPS Y11, Y11                // c4417c28db or c4417c29db
+	//TODO: VMOVAPS Y2, (BX)                // c4e17c2913 or c5fc2913
+	//TODO: VMOVAPS Y11, (BX)               // c4617c291b or c57c291b
+	//TODO: VMOVAPS Y2, (R11)               // c4c17c2913
+	//TODO: VMOVAPS Y11, (R11)              // c4417c291b
+	//TODO: VMOVD X2, (BX)                  // c4e1797e13 or c5f97e13
+	//TODO: VMOVD X11, (BX)                 // c461797e1b or c5797e1b
+	//TODO: VMOVD X2, (R11)                 // c4c1797e13
+	//TODO: VMOVD X11, (R11)                // c441797e1b
+	//TODO: VMOVD X2, DX                    // c4e1797ed2 or c5f97ed2
+	//TODO: VMOVD X11, DX                   // c461797eda or c5797eda
+	//TODO: VMOVD X2, R11                   // c4c1797ed3
+	//TODO: VMOVD X11, R11                  // c441797edb
+	//TODO: VMOVD (BX), X2                  // c4e1796e13 or c5f96e13
+	//TODO: VMOVD (R11), X2                 // c4c1796e13
+	//TODO: VMOVD DX, X2                    // c4e1796ed2 or c5f96ed2
+	//TODO: VMOVD R11, X2                   // c4c1796ed3
+	//TODO: VMOVD (BX), X11                 // c461796e1b or c5796e1b
+	//TODO: VMOVD (R11), X11                // c441796e1b
+	//TODO: VMOVD DX, X11                   // c461796eda or c5796eda
+	//TODO: VMOVD R11, X11                  // c441796edb
+	//TODO: VMOVDDUP (BX), X2               // c4e17b1213 or c5fb1213
+	//TODO: VMOVDDUP (R11), X2              // c4c17b1213
+	//TODO: VMOVDDUP X2, X2                 // c4e17b12d2 or c5fb12d2
+	//TODO: VMOVDDUP X11, X2                // c4c17b12d3
+	//TODO: VMOVDDUP (BX), X11              // c4617b121b or c57b121b
+	//TODO: VMOVDDUP (R11), X11             // c4417b121b
+	//TODO: VMOVDDUP X2, X11                // c4617b12da or c57b12da
+	//TODO: VMOVDDUP X11, X11               // c4417b12db
+	//TODO: VMOVDDUP (BX), Y2               // c4e17f1213 or c5ff1213
+	//TODO: VMOVDDUP (R11), Y2              // c4c17f1213
+	//TODO: VMOVDDUP Y2, Y2                 // c4e17f12d2 or c5ff12d2
+	//TODO: VMOVDDUP Y11, Y2                // c4c17f12d3
+	//TODO: VMOVDDUP (BX), Y11              // c4617f121b or c57f121b
+	//TODO: VMOVDDUP (R11), Y11             // c4417f121b
+	//TODO: VMOVDDUP Y2, Y11                // c4617f12da or c57f12da
+	//TODO: VMOVDDUP Y11, Y11               // c4417f12db
+	VMOVDQA (BX), X2                        // c4e1796f13 or c5f96f13
+	VMOVDQA (R11), X2                       // c4c1796f13
+	VMOVDQA X2, X2                          // c4e1796fd2 or c5f96fd2 or c4e1797fd2 or c5f97fd2
+	VMOVDQA X11, X2                         // c4c1796fd3 or c461797fda or c5797fda
+	VMOVDQA (BX), X11                       // c461796f1b or c5796f1b
+	VMOVDQA (R11), X11                      // c441796f1b
+	VMOVDQA X2, X11                         // c461796fda or c5796fda or c4c1797fd3
+	VMOVDQA X11, X11                        // c441796fdb or c441797fdb
+	VMOVDQA X2, (BX)                        // c4e1797f13 or c5f97f13
+	VMOVDQA X11, (BX)                       // c461797f1b or c5797f1b
+	VMOVDQA X2, (R11)                       // c4c1797f13
+	VMOVDQA X11, (R11)                      // c441797f1b
+	VMOVDQA (BX), Y2                        // c4e17d6f13 or c5fd6f13
+	VMOVDQA (R11), Y2                       // c4c17d6f13
+	VMOVDQA Y2, Y2                          // c4e17d6fd2 or c5fd6fd2 or c4e17d7fd2 or c5fd7fd2
+	VMOVDQA Y11, Y2                         // c4c17d6fd3 or c4617d7fda or c57d7fda
+	VMOVDQA (BX), Y11                       // c4617d6f1b or c57d6f1b
+	VMOVDQA (R11), Y11                      // c4417d6f1b
+	VMOVDQA Y2, Y11                         // c4617d6fda or c57d6fda or c4c17d7fd3
+	VMOVDQA Y11, Y11                        // c4417d6fdb or c4417d7fdb
+	VMOVDQA Y2, (BX)                        // c4e17d7f13 or c5fd7f13
+	VMOVDQA Y11, (BX)                       // c4617d7f1b or c57d7f1b
+	VMOVDQA Y2, (R11)                       // c4c17d7f13
+	VMOVDQA Y11, (R11)                      // c4417d7f1b
+	VMOVDQU (BX), X2                        // c4e17a6f13 or c5fa6f13
+	VMOVDQU (R11), X2                       // c4c17a6f13
+	VMOVDQU X2, X2                          // c4e17a6fd2 or c5fa6fd2 or c4e17a7fd2 or c5fa7fd2
+	VMOVDQU X11, X2                         // c4c17a6fd3 or c4617a7fda or c57a7fda
+	VMOVDQU (BX), X11                       // c4617a6f1b or c57a6f1b
+	VMOVDQU (R11), X11                      // c4417a6f1b
+	VMOVDQU X2, X11                         // c4617a6fda or c57a6fda or c4c17a7fd3
+	VMOVDQU X11, X11                        // c4417a6fdb or c4417a7fdb
+	VMOVDQU X2, (BX)                        // c4e17a7f13 or c5fa7f13
+	VMOVDQU X11, (BX)                       // c4617a7f1b or c57a7f1b
+	VMOVDQU X2, (R11)                       // c4c17a7f13
+	VMOVDQU X11, (R11)                      // c4417a7f1b
+	VMOVDQU (BX), Y2                        // c4e17e6f13 or c5fe6f13
+	VMOVDQU (R11), Y2                       // c4c17e6f13
+	VMOVDQU Y2, Y2                          // c4e17e6fd2 or c5fe6fd2 or c4e17e7fd2 or c5fe7fd2
+	VMOVDQU Y11, Y2                         // c4c17e6fd3 or c4617e7fda or c57e7fda
+	VMOVDQU (BX), Y11                       // c4617e6f1b or c57e6f1b
+	VMOVDQU (R11), Y11                      // c4417e6f1b
+	VMOVDQU Y2, Y11                         // c4617e6fda or c57e6fda or c4c17e7fd3
+	VMOVDQU Y11, Y11                        // c4417e6fdb or c4417e7fdb
+	VMOVDQU Y2, (BX)                        // c4e17e7f13 or c5fe7f13
+	VMOVDQU Y11, (BX)                       // c4617e7f1b or c57e7f1b
+	VMOVDQU Y2, (R11)                       // c4c17e7f13
+	VMOVDQU Y11, (R11)                      // c4417e7f1b
+	//TODO: VMOVHLPS X2, X9, X2             // c4e13012d2 or c5b012d2
+	//TODO: VMOVHLPS X11, X9, X2            // c4c13012d3
+	//TODO: VMOVHLPS X2, X9, X11            // c4613012da or c53012da
+	//TODO: VMOVHLPS X11, X9, X11           // c4413012db
+	//TODO: VMOVHPD X2, (BX)                // c4e1791713 or c5f91713
+	//TODO: VMOVHPD X11, (BX)               // c46179171b or c579171b
+	//TODO: VMOVHPD X2, (R11)               // c4c1791713
+	//TODO: VMOVHPD X11, (R11)              // c44179171b
+	//TODO: VMOVHPD (BX), X9, X2            // c4e1311613 or c5b11613
+	//TODO: VMOVHPD (R11), X9, X2           // c4c1311613
+	//TODO: VMOVHPD (BX), X9, X11           // c46131161b or c531161b
+	//TODO: VMOVHPD (R11), X9, X11          // c44131161b
+	//TODO: VMOVHPS X2, (BX)                // c4e1781713 or c5f81713
+	//TODO: VMOVHPS X11, (BX)               // c46178171b or c578171b
+	//TODO: VMOVHPS X2, (R11)               // c4c1781713
+	//TODO: VMOVHPS X11, (R11)              // c44178171b
+	//TODO: VMOVHPS (BX), X9, X2            // c4e1301613 or c5b01613
+	//TODO: VMOVHPS (R11), X9, X2           // c4c1301613
+	//TODO: VMOVHPS (BX), X9, X11           // c46130161b or c530161b
+	//TODO: VMOVHPS (R11), X9, X11          // c44130161b
+	//TODO: VMOVLHPS X2, X9, X2             // c4e13016d2 or c5b016d2
+	//TODO: VMOVLHPS X11, X9, X2            // c4c13016d3
+	//TODO: VMOVLHPS X2, X9, X11            // c4613016da or c53016da
+	//TODO: VMOVLHPS X11, X9, X11           // c4413016db
+	//TODO: VMOVLPD X2, (BX)                // c4e1791313 or c5f91313
+	//TODO: VMOVLPD X11, (BX)               // c46179131b or c579131b
+	//TODO: VMOVLPD X2, (R11)               // c4c1791313
+	//TODO: VMOVLPD X11, (R11)              // c44179131b
+	//TODO: VMOVLPD (BX), X9, X2            // c4e1311213 or c5b11213
+	//TODO: VMOVLPD (R11), X9, X2           // c4c1311213
+	//TODO: VMOVLPD (BX), X9, X11           // c46131121b or c531121b
+	//TODO: VMOVLPD (R11), X9, X11          // c44131121b
+	//TODO: VMOVLPS X2, (BX)                // c4e1781313 or c5f81313
+	//TODO: VMOVLPS X11, (BX)               // c46178131b or c578131b
+	//TODO: VMOVLPS X2, (R11)               // c4c1781313
+	//TODO: VMOVLPS X11, (R11)              // c44178131b
+	//TODO: VMOVLPS (BX), X9, X2            // c4e1301213 or c5b01213
+	//TODO: VMOVLPS (R11), X9, X2           // c4c1301213
+	//TODO: VMOVLPS (BX), X9, X11           // c46130121b or c530121b
+	//TODO: VMOVLPS (R11), X9, X11          // c44130121b
+	//TODO: VMOVMSKPD X2, DX                // c4e17950d2 or c5f950d2
+	//TODO: VMOVMSKPD X11, DX               // c4c17950d3
+	//TODO: VMOVMSKPD X2, R11               // c4617950da or c57950da
+	//TODO: VMOVMSKPD X11, R11              // c4417950db
+	//TODO: VMOVMSKPD Y2, DX                // c4e17d50d2 or c5fd50d2
+	//TODO: VMOVMSKPD Y11, DX               // c4c17d50d3
+	//TODO: VMOVMSKPD Y2, R11               // c4617d50da or c57d50da
+	//TODO: VMOVMSKPD Y11, R11              // c4417d50db
+	//TODO: VMOVMSKPS X2, DX                // c4e17850d2 or c5f850d2
+	//TODO: VMOVMSKPS X11, DX               // c4c17850d3
+	//TODO: VMOVMSKPS X2, R11               // c4617850da or c57850da
+	//TODO: VMOVMSKPS X11, R11              // c4417850db
+	//TODO: VMOVMSKPS Y2, DX                // c4e17c50d2 or c5fc50d2
+	//TODO: VMOVMSKPS Y11, DX               // c4c17c50d3
+	//TODO: VMOVMSKPS Y2, R11               // c4617c50da or c57c50da
+	//TODO: VMOVMSKPS Y11, R11              // c4417c50db
+	VMOVNTDQ X2, (BX)                       // c4e179e713 or c5f9e713
+	VMOVNTDQ X11, (BX)                      // c46179e71b or c579e71b
+	VMOVNTDQ X2, (R11)                      // c4c179e713
+	VMOVNTDQ X11, (R11)                     // c44179e71b
+	VMOVNTDQ Y2, (BX)                       // c4e17de713 or c5fde713
+	VMOVNTDQ Y11, (BX)                      // c4617de71b or c57de71b
+	VMOVNTDQ Y2, (R11)                      // c4c17de713
+	VMOVNTDQ Y11, (R11)                     // c4417de71b
+	//TODO: VMOVNTDQA (BX), X2              // c4e2792a13
+	//TODO: VMOVNTDQA (R11), X2             // c4c2792a13
+	//TODO: VMOVNTDQA (BX), X11             // c462792a1b
+	//TODO: VMOVNTDQA (R11), X11            // c442792a1b
+	//TODO: VMOVNTDQA (BX), Y2              // c4e27d2a13
+	//TODO: VMOVNTDQA (R11), Y2             // c4c27d2a13
+	//TODO: VMOVNTDQA (BX), Y11             // c4627d2a1b
+	//TODO: VMOVNTDQA (R11), Y11            // c4427d2a1b
+	//TODO: VMOVNTPD X2, (BX)               // c4e1792b13 or c5f92b13
+	//TODO: VMOVNTPD X11, (BX)              // c461792b1b or c5792b1b
+	//TODO: VMOVNTPD X2, (R11)              // c4c1792b13
+	//TODO: VMOVNTPD X11, (R11)             // c441792b1b
+	//TODO: VMOVNTPD Y2, (BX)               // c4e17d2b13 or c5fd2b13
+	//TODO: VMOVNTPD Y11, (BX)              // c4617d2b1b or c57d2b1b
+	//TODO: VMOVNTPD Y2, (R11)              // c4c17d2b13
+	//TODO: VMOVNTPD Y11, (R11)             // c4417d2b1b
+	//TODO: VMOVNTPS X2, (BX)               // c4e1782b13 or c5f82b13
+	//TODO: VMOVNTPS X11, (BX)              // c461782b1b or c5782b1b
+	//TODO: VMOVNTPS X2, (R11)              // c4c1782b13
+	//TODO: VMOVNTPS X11, (R11)             // c441782b1b
+	//TODO: VMOVNTPS Y2, (BX)               // c4e17c2b13 or c5fc2b13
+	//TODO: VMOVNTPS Y11, (BX)              // c4617c2b1b or c57c2b1b
+	//TODO: VMOVNTPS Y2, (R11)              // c4c17c2b13
+	//TODO: VMOVNTPS Y11, (R11)             // c4417c2b1b
+	//TODO: VMOVQ X2, (BX)                  // c4e1f97e13 or c4e179d613 or c5f9d613
+	//TODO: VMOVQ X11, (BX)                 // c461f97e1b or c46179d61b or c579d61b
+	//TODO: VMOVQ X2, (R11)                 // c4c1f97e13 or c4c179d613
+	//TODO: VMOVQ X11, (R11)                // c441f97e1b or c44179d61b
+	//TODO: VMOVQ X2, DX                    // c4e1f97ed2
+	//TODO: VMOVQ X11, DX                   // c461f97eda
+	//TODO: VMOVQ X2, R11                   // c4c1f97ed3
+	//TODO: VMOVQ X11, R11                  // c441f97edb
+	//TODO: VMOVQ (BX), X2                  // c4e17a7e13 or c5fa7e13 or c4e1f96e13
+	//TODO: VMOVQ (R11), X2                 // c4c17a7e13 or c4c1f96e13
+	//TODO: VMOVQ (BX), X11                 // c4617a7e1b or c57a7e1b or c461f96e1b
+	//TODO: VMOVQ (R11), X11                // c4417a7e1b or c441f96e1b
+	//TODO: VMOVQ DX, X2                    // c4e1f96ed2
+	//TODO: VMOVQ R11, X2                   // c4c1f96ed3
+	//TODO: VMOVQ DX, X11                   // c461f96eda
+	//TODO: VMOVQ R11, X11                  // c441f96edb
+	//TODO: VMOVQ X2, X2                    // c4e17a7ed2 or c5fa7ed2 or c4e179d6d2 or c5f9d6d2
+	//TODO: VMOVQ X11, X2                   // c4c17a7ed3 or c46179d6da or c579d6da
+	//TODO: VMOVQ X2, X11                   // c4617a7eda or c57a7eda or c4c179d6d3
+	//TODO: VMOVQ X11, X11                  // c4417a7edb or c44179d6db
+	//TODO: VMOVSD X2, (BX)                 // c4e17b1113 or c5fb1113
+	//TODO: VMOVSD X11, (BX)                // c4617b111b or c57b111b
+	//TODO: VMOVSD X2, (R11)                // c4c17b1113
+	//TODO: VMOVSD X11, (R11)               // c4417b111b
+	//TODO: VMOVSD (BX), X2                 // c4e17b1013 or c5fb1013
+	//TODO: VMOVSD (R11), X2                // c4c17b1013
+	//TODO: VMOVSD (BX), X11                // c4617b101b or c57b101b
+	//TODO: VMOVSD (R11), X11               // c4417b101b
+	//TODO: VMOVSD X2, X9, X2               // c4e13310d2 or c5b310d2 or c4e13311d2 or c5b311d2
+	//TODO: VMOVSD X11, X9, X2              // c4c13310d3 or c4613311da or c53311da
+	//TODO: VMOVSD X2, X9, X11              // c4613310da or c53310da or c4c13311d3
+	//TODO: VMOVSD X11, X9, X11             // c4413310db or c4413311db
+	//TODO: VMOVSHDUP (BX), X2              // c4e17a1613 or c5fa1613
+	//TODO: VMOVSHDUP (R11), X2             // c4c17a1613
+	//TODO: VMOVSHDUP X2, X2                // c4e17a16d2 or c5fa16d2
+	//TODO: VMOVSHDUP X11, X2               // c4c17a16d3
+	//TODO: VMOVSHDUP (BX), X11             // c4617a161b or c57a161b
+	//TODO: VMOVSHDUP (R11), X11            // c4417a161b
+	//TODO: VMOVSHDUP X2, X11               // c4617a16da or c57a16da
+	//TODO: VMOVSHDUP X11, X11              // c4417a16db
+	//TODO: VMOVSHDUP (BX), Y2              // c4e17e1613 or c5fe1613
+	//TODO: VMOVSHDUP (R11), Y2             // c4c17e1613
+	//TODO: VMOVSHDUP Y2, Y2                // c4e17e16d2 or c5fe16d2
+	//TODO: VMOVSHDUP Y11, Y2               // c4c17e16d3
+	//TODO: VMOVSHDUP (BX), Y11             // c4617e161b or c57e161b
+	//TODO: VMOVSHDUP (R11), Y11            // c4417e161b
+	//TODO: VMOVSHDUP Y2, Y11               // c4617e16da or c57e16da
+	//TODO: VMOVSHDUP Y11, Y11              // c4417e16db
+	//TODO: VMOVSLDUP (BX), X2              // c4e17a1213 or c5fa1213
+	//TODO: VMOVSLDUP (R11), X2             // c4c17a1213
+	//TODO: VMOVSLDUP X2, X2                // c4e17a12d2 or c5fa12d2
+	//TODO: VMOVSLDUP X11, X2               // c4c17a12d3
+	//TODO: VMOVSLDUP (BX), X11             // c4617a121b or c57a121b
+	//TODO: VMOVSLDUP (R11), X11            // c4417a121b
+	//TODO: VMOVSLDUP X2, X11               // c4617a12da or c57a12da
+	//TODO: VMOVSLDUP X11, X11              // c4417a12db
+	//TODO: VMOVSLDUP (BX), Y2              // c4e17e1213 or c5fe1213
+	//TODO: VMOVSLDUP (R11), Y2             // c4c17e1213
+	//TODO: VMOVSLDUP Y2, Y2                // c4e17e12d2 or c5fe12d2
+	//TODO: VMOVSLDUP Y11, Y2               // c4c17e12d3
+	//TODO: VMOVSLDUP (BX), Y11             // c4617e121b or c57e121b
+	//TODO: VMOVSLDUP (R11), Y11            // c4417e121b
+	//TODO: VMOVSLDUP Y2, Y11               // c4617e12da or c57e12da
+	//TODO: VMOVSLDUP Y11, Y11              // c4417e12db
+	//TODO: VMOVSS X2, (BX)                 // c4e17a1113 or c5fa1113
+	//TODO: VMOVSS X11, (BX)                // c4617a111b or c57a111b
+	//TODO: VMOVSS X2, (R11)                // c4c17a1113
+	//TODO: VMOVSS X11, (R11)               // c4417a111b
+	//TODO: VMOVSS (BX), X2                 // c4e17a1013 or c5fa1013
+	//TODO: VMOVSS (R11), X2                // c4c17a1013
+	//TODO: VMOVSS (BX), X11                // c4617a101b or c57a101b
+	//TODO: VMOVSS (R11), X11               // c4417a101b
+	//TODO: VMOVSS X2, X9, X2               // c4e13210d2 or c5b210d2 or c4e13211d2 or c5b211d2
+	//TODO: VMOVSS X11, X9, X2              // c4c13210d3 or c4613211da or c53211da
+	//TODO: VMOVSS X2, X9, X11              // c4613210da or c53210da or c4c13211d3
+	//TODO: VMOVSS X11, X9, X11             // c4413210db or c4413211db
+	//TODO: VMOVUPD (BX), X2                // c4e1791013 or c5f91013
+	//TODO: VMOVUPD (R11), X2               // c4c1791013
+	//TODO: VMOVUPD X2, X2                  // c4e17910d2 or c5f910d2 or c4e17911d2 or c5f911d2
+	//TODO: VMOVUPD X11, X2                 // c4c17910d3 or c4617911da or c57911da
+	//TODO: VMOVUPD (BX), X11               // c46179101b or c579101b
+	//TODO: VMOVUPD (R11), X11              // c44179101b
+	//TODO: VMOVUPD X2, X11                 // c4617910da or c57910da or c4c17911d3
+	//TODO: VMOVUPD X11, X11                // c4417910db or c4417911db
+	//TODO: VMOVUPD X2, (BX)                // c4e1791113 or c5f91113
+	//TODO: VMOVUPD X11, (BX)               // c46179111b or c579111b
+	//TODO: VMOVUPD X2, (R11)               // c4c1791113
+	//TODO: VMOVUPD X11, (R11)              // c44179111b
+	//TODO: VMOVUPD (BX), Y2                // c4e17d1013 or c5fd1013
+	//TODO: VMOVUPD (R11), Y2               // c4c17d1013
+	//TODO: VMOVUPD Y2, Y2                  // c4e17d10d2 or c5fd10d2 or c4e17d11d2 or c5fd11d2
+	//TODO: VMOVUPD Y11, Y2                 // c4c17d10d3 or c4617d11da or c57d11da
+	//TODO: VMOVUPD (BX), Y11               // c4617d101b or c57d101b
+	//TODO: VMOVUPD (R11), Y11              // c4417d101b
+	//TODO: VMOVUPD Y2, Y11                 // c4617d10da or c57d10da or c4c17d11d3
+	//TODO: VMOVUPD Y11, Y11                // c4417d10db or c4417d11db
+	//TODO: VMOVUPD Y2, (BX)                // c4e17d1113 or c5fd1113
+	//TODO: VMOVUPD Y11, (BX)               // c4617d111b or c57d111b
+	//TODO: VMOVUPD Y2, (R11)               // c4c17d1113
+	//TODO: VMOVUPD Y11, (R11)              // c4417d111b
+	//TODO: VMOVUPS (BX), X2                // c4e1781013 or c5f81013
+	//TODO: VMOVUPS (R11), X2               // c4c1781013
+	//TODO: VMOVUPS X2, X2                  // c4e17810d2 or c5f810d2 or c4e17811d2 or c5f811d2
+	//TODO: VMOVUPS X11, X2                 // c4c17810d3 or c4617811da or c57811da
+	//TODO: VMOVUPS (BX), X11               // c46178101b or c578101b
+	//TODO: VMOVUPS (R11), X11              // c44178101b
+	//TODO: VMOVUPS X2, X11                 // c4617810da or c57810da or c4c17811d3
+	//TODO: VMOVUPS X11, X11                // c4417810db or c4417811db
+	//TODO: VMOVUPS X2, (BX)                // c4e1781113 or c5f81113
+	//TODO: VMOVUPS X11, (BX)               // c46178111b or c578111b
+	//TODO: VMOVUPS X2, (R11)               // c4c1781113
+	//TODO: VMOVUPS X11, (R11)              // c44178111b
+	//TODO: VMOVUPS (BX), Y2                // c4e17c1013 or c5fc1013
+	//TODO: VMOVUPS (R11), Y2               // c4c17c1013
+	//TODO: VMOVUPS Y2, Y2                  // c4e17c10d2 or c5fc10d2 or c4e17c11d2 or c5fc11d2
+	//TODO: VMOVUPS Y11, Y2                 // c4c17c10d3 or c4617c11da or c57c11da
+	//TODO: VMOVUPS (BX), Y11               // c4617c101b or c57c101b
+	//TODO: VMOVUPS (R11), Y11              // c4417c101b
+	//TODO: VMOVUPS Y2, Y11                 // c4617c10da or c57c10da or c4c17c11d3
+	//TODO: VMOVUPS Y11, Y11                // c4417c10db or c4417c11db
+	//TODO: VMOVUPS Y2, (BX)                // c4e17c1113 or c5fc1113
+	//TODO: VMOVUPS Y11, (BX)               // c4617c111b or c57c111b
+	//TODO: VMOVUPS Y2, (R11)               // c4c17c1113
+	//TODO: VMOVUPS Y11, (R11)              // c4417c111b
+	//TODO: VMPSADBW $7, (BX), X9, X2       // c4e331421307
+	//TODO: VMPSADBW $7, (R11), X9, X2      // c4c331421307
+	//TODO: VMPSADBW $7, X2, X9, X2         // c4e33142d207
+	//TODO: VMPSADBW $7, X11, X9, X2        // c4c33142d307
+	//TODO: VMPSADBW $7, (BX), X9, X11      // c46331421b07
+	//TODO: VMPSADBW $7, (R11), X9, X11     // c44331421b07
+	//TODO: VMPSADBW $7, X2, X9, X11        // c4633142da07
+	//TODO: VMPSADBW $7, X11, X9, X11       // c4433142db07
+	//TODO: VMPSADBW $7, (BX), Y15, Y2      // c4e305421307
+	//TODO: VMPSADBW $7, (R11), Y15, Y2     // c4c305421307
+	//TODO: VMPSADBW $7, Y2, Y15, Y2        // c4e30542d207
+	//TODO: VMPSADBW $7, Y11, Y15, Y2       // c4c30542d307
+	//TODO: VMPSADBW $7, (BX), Y15, Y11     // c46305421b07
+	//TODO: VMPSADBW $7, (R11), Y15, Y11    // c44305421b07
+	//TODO: VMPSADBW $7, Y2, Y15, Y11       // c4630542da07
+	//TODO: VMPSADBW $7, Y11, Y15, Y11      // c4430542db07
+	//TODO: VMULPD (BX), X9, X2             // c4e1315913 or c5b15913
+	//TODO: VMULPD (R11), X9, X2            // c4c1315913
+	//TODO: VMULPD X2, X9, X2               // c4e13159d2 or c5b159d2
+	//TODO: VMULPD X11, X9, X2              // c4c13159d3
+	//TODO: VMULPD (BX), X9, X11            // c46131591b or c531591b
+	//TODO: VMULPD (R11), X9, X11           // c44131591b
+	//TODO: VMULPD X2, X9, X11              // c4613159da or c53159da
+	//TODO: VMULPD X11, X9, X11             // c4413159db
+	//TODO: VMULPD (BX), Y15, Y2            // c4e1055913 or c5855913
+	//TODO: VMULPD (R11), Y15, Y2           // c4c1055913
+	//TODO: VMULPD Y2, Y15, Y2              // c4e10559d2 or c58559d2
+	//TODO: VMULPD Y11, Y15, Y2             // c4c10559d3
+	//TODO: VMULPD (BX), Y15, Y11           // c46105591b or c505591b
+	//TODO: VMULPD (R11), Y15, Y11          // c44105591b
+	//TODO: VMULPD Y2, Y15, Y11             // c4610559da or c50559da
+	//TODO: VMULPD Y11, Y15, Y11            // c4410559db
+	//TODO: VMULPS (BX), X9, X2             // c4e1305913 or c5b05913
+	//TODO: VMULPS (R11), X9, X2            // c4c1305913
+	//TODO: VMULPS X2, X9, X2               // c4e13059d2 or c5b059d2
+	//TODO: VMULPS X11, X9, X2              // c4c13059d3
+	//TODO: VMULPS (BX), X9, X11            // c46130591b or c530591b
+	//TODO: VMULPS (R11), X9, X11           // c44130591b
+	//TODO: VMULPS X2, X9, X11              // c4613059da or c53059da
+	//TODO: VMULPS X11, X9, X11             // c4413059db
+	//TODO: VMULPS (BX), Y15, Y2            // c4e1045913 or c5845913
+	//TODO: VMULPS (R11), Y15, Y2           // c4c1045913
+	//TODO: VMULPS Y2, Y15, Y2              // c4e10459d2 or c58459d2
+	//TODO: VMULPS Y11, Y15, Y2             // c4c10459d3
+	//TODO: VMULPS (BX), Y15, Y11           // c46104591b or c504591b
+	//TODO: VMULPS (R11), Y15, Y11          // c44104591b
+	//TODO: VMULPS Y2, Y15, Y11             // c4610459da or c50459da
+	//TODO: VMULPS Y11, Y15, Y11            // c4410459db
+	//TODO: VMULSD (BX), X9, X2             // c4e1335913 or c5b35913
+	//TODO: VMULSD (R11), X9, X2            // c4c1335913
+	//TODO: VMULSD X2, X9, X2               // c4e13359d2 or c5b359d2
+	//TODO: VMULSD X11, X9, X2              // c4c13359d3
+	//TODO: VMULSD (BX), X9, X11            // c46133591b or c533591b
+	//TODO: VMULSD (R11), X9, X11           // c44133591b
+	//TODO: VMULSD X2, X9, X11              // c4613359da or c53359da
+	//TODO: VMULSD X11, X9, X11             // c4413359db
+	//TODO: VMULSS (BX), X9, X2             // c4e1325913 or c5b25913
+	//TODO: VMULSS (R11), X9, X2            // c4c1325913
+	//TODO: VMULSS X2, X9, X2               // c4e13259d2 or c5b259d2
+	//TODO: VMULSS X11, X9, X2              // c4c13259d3
+	//TODO: VMULSS (BX), X9, X11            // c46132591b or c532591b
+	//TODO: VMULSS (R11), X9, X11           // c44132591b
+	//TODO: VMULSS X2, X9, X11              // c4613259da or c53259da
+	//TODO: VMULSS X11, X9, X11             // c4413259db
+	//TODO: VORPD (BX), X9, X2              // c4e1315613 or c5b15613
+	//TODO: VORPD (R11), X9, X2             // c4c1315613
+	//TODO: VORPD X2, X9, X2                // c4e13156d2 or c5b156d2
+	//TODO: VORPD X11, X9, X2               // c4c13156d3
+	//TODO: VORPD (BX), X9, X11             // c46131561b or c531561b
+	//TODO: VORPD (R11), X9, X11            // c44131561b
+	//TODO: VORPD X2, X9, X11               // c4613156da or c53156da
+	//TODO: VORPD X11, X9, X11              // c4413156db
+	//TODO: VORPD (BX), Y15, Y2             // c4e1055613 or c5855613
+	//TODO: VORPD (R11), Y15, Y2            // c4c1055613
+	//TODO: VORPD Y2, Y15, Y2               // c4e10556d2 or c58556d2
+	//TODO: VORPD Y11, Y15, Y2              // c4c10556d3
+	//TODO: VORPD (BX), Y15, Y11            // c46105561b or c505561b
+	//TODO: VORPD (R11), Y15, Y11           // c44105561b
+	//TODO: VORPD Y2, Y15, Y11              // c4610556da or c50556da
+	//TODO: VORPD Y11, Y15, Y11             // c4410556db
+	//TODO: VORPS (BX), X9, X2              // c4e1305613 or c5b05613
+	//TODO: VORPS (R11), X9, X2             // c4c1305613
+	//TODO: VORPS X2, X9, X2                // c4e13056d2 or c5b056d2
+	//TODO: VORPS X11, X9, X2               // c4c13056d3
+	//TODO: VORPS (BX), X9, X11             // c46130561b or c530561b
+	//TODO: VORPS (R11), X9, X11            // c44130561b
+	//TODO: VORPS X2, X9, X11               // c4613056da or c53056da
+	//TODO: VORPS X11, X9, X11              // c4413056db
+	//TODO: VORPS (BX), Y15, Y2             // c4e1045613 or c5845613
+	//TODO: VORPS (R11), Y15, Y2            // c4c1045613
+	//TODO: VORPS Y2, Y15, Y2               // c4e10456d2 or c58456d2
+	//TODO: VORPS Y11, Y15, Y2              // c4c10456d3
+	//TODO: VORPS (BX), Y15, Y11            // c46104561b or c504561b
+	//TODO: VORPS (R11), Y15, Y11           // c44104561b
+	//TODO: VORPS Y2, Y15, Y11              // c4610456da or c50456da
+	//TODO: VORPS Y11, Y15, Y11             // c4410456db
+	//TODO: VPABSB (BX), X2                 // c4e2791c13
+	//TODO: VPABSB (R11), X2                // c4c2791c13
+	//TODO: VPABSB X2, X2                   // c4e2791cd2
+	//TODO: VPABSB X11, X2                  // c4c2791cd3
+	//TODO: VPABSB (BX), X11                // c462791c1b
+	//TODO: VPABSB (R11), X11               // c442791c1b
+	//TODO: VPABSB X2, X11                  // c462791cda
+	//TODO: VPABSB X11, X11                 // c442791cdb
+	//TODO: VPABSB (BX), Y2                 // c4e27d1c13
+	//TODO: VPABSB (R11), Y2                // c4c27d1c13
+	//TODO: VPABSB Y2, Y2                   // c4e27d1cd2
+	//TODO: VPABSB Y11, Y2                  // c4c27d1cd3
+	//TODO: VPABSB (BX), Y11                // c4627d1c1b
+	//TODO: VPABSB (R11), Y11               // c4427d1c1b
+	//TODO: VPABSB Y2, Y11                  // c4627d1cda
+	//TODO: VPABSB Y11, Y11                 // c4427d1cdb
+	//TODO: VPABSD (BX), X2                 // c4e2791e13
+	//TODO: VPABSD (R11), X2                // c4c2791e13
+	//TODO: VPABSD X2, X2                   // c4e2791ed2
+	//TODO: VPABSD X11, X2                  // c4c2791ed3
+	//TODO: VPABSD (BX), X11                // c462791e1b
+	//TODO: VPABSD (R11), X11               // c442791e1b
+	//TODO: VPABSD X2, X11                  // c462791eda
+	//TODO: VPABSD X11, X11                 // c442791edb
+	//TODO: VPABSD (BX), Y2                 // c4e27d1e13
+	//TODO: VPABSD (R11), Y2                // c4c27d1e13
+	//TODO: VPABSD Y2, Y2                   // c4e27d1ed2
+	//TODO: VPABSD Y11, Y2                  // c4c27d1ed3
+	//TODO: VPABSD (BX), Y11                // c4627d1e1b
+	//TODO: VPABSD (R11), Y11               // c4427d1e1b
+	//TODO: VPABSD Y2, Y11                  // c4627d1eda
+	//TODO: VPABSD Y11, Y11                 // c4427d1edb
+	//TODO: VPABSW (BX), X2                 // c4e2791d13
+	//TODO: VPABSW (R11), X2                // c4c2791d13
+	//TODO: VPABSW X2, X2                   // c4e2791dd2
+	//TODO: VPABSW X11, X2                  // c4c2791dd3
+	//TODO: VPABSW (BX), X11                // c462791d1b
+	//TODO: VPABSW (R11), X11               // c442791d1b
+	//TODO: VPABSW X2, X11                  // c462791dda
+	//TODO: VPABSW X11, X11                 // c442791ddb
+	//TODO: VPABSW (BX), Y2                 // c4e27d1d13
+	//TODO: VPABSW (R11), Y2                // c4c27d1d13
+	//TODO: VPABSW Y2, Y2                   // c4e27d1dd2
+	//TODO: VPABSW Y11, Y2                  // c4c27d1dd3
+	//TODO: VPABSW (BX), Y11                // c4627d1d1b
+	//TODO: VPABSW (R11), Y11               // c4427d1d1b
+	//TODO: VPABSW Y2, Y11                  // c4627d1dda
+	//TODO: VPABSW Y11, Y11                 // c4427d1ddb
+	//TODO: VPACKSSDW (BX), X9, X2          // c4e1316b13 or c5b16b13
+	//TODO: VPACKSSDW (R11), X9, X2         // c4c1316b13
+	//TODO: VPACKSSDW X2, X9, X2            // c4e1316bd2 or c5b16bd2
+	//TODO: VPACKSSDW X11, X9, X2           // c4c1316bd3
+	//TODO: VPACKSSDW (BX), X9, X11         // c461316b1b or c5316b1b
+	//TODO: VPACKSSDW (R11), X9, X11        // c441316b1b
+	//TODO: VPACKSSDW X2, X9, X11           // c461316bda or c5316bda
+	//TODO: VPACKSSDW X11, X9, X11          // c441316bdb
+	//TODO: VPACKSSDW (BX), Y15, Y2         // c4e1056b13 or c5856b13
+	//TODO: VPACKSSDW (R11), Y15, Y2        // c4c1056b13
+	//TODO: VPACKSSDW Y2, Y15, Y2           // c4e1056bd2 or c5856bd2
+	//TODO: VPACKSSDW Y11, Y15, Y2          // c4c1056bd3
+	//TODO: VPACKSSDW (BX), Y15, Y11        // c461056b1b or c5056b1b
+	//TODO: VPACKSSDW (R11), Y15, Y11       // c441056b1b
+	//TODO: VPACKSSDW Y2, Y15, Y11          // c461056bda or c5056bda
+	//TODO: VPACKSSDW Y11, Y15, Y11         // c441056bdb
+	//TODO: VPACKSSWB (BX), X9, X2          // c4e1316313 or c5b16313
+	//TODO: VPACKSSWB (R11), X9, X2         // c4c1316313
+	//TODO: VPACKSSWB X2, X9, X2            // c4e13163d2 or c5b163d2
+	//TODO: VPACKSSWB X11, X9, X2           // c4c13163d3
+	//TODO: VPACKSSWB (BX), X9, X11         // c46131631b or c531631b
+	//TODO: VPACKSSWB (R11), X9, X11        // c44131631b
+	//TODO: VPACKSSWB X2, X9, X11           // c4613163da or c53163da
+	//TODO: VPACKSSWB X11, X9, X11          // c4413163db
+	//TODO: VPACKSSWB (BX), Y15, Y2         // c4e1056313 or c5856313
+	//TODO: VPACKSSWB (R11), Y15, Y2        // c4c1056313
+	//TODO: VPACKSSWB Y2, Y15, Y2           // c4e10563d2 or c58563d2
+	//TODO: VPACKSSWB Y11, Y15, Y2          // c4c10563d3
+	//TODO: VPACKSSWB (BX), Y15, Y11        // c46105631b or c505631b
+	//TODO: VPACKSSWB (R11), Y15, Y11       // c44105631b
+	//TODO: VPACKSSWB Y2, Y15, Y11          // c4610563da or c50563da
+	//TODO: VPACKSSWB Y11, Y15, Y11         // c4410563db
+	//TODO: VPACKUSDW (BX), X9, X2          // c4e2312b13
+	//TODO: VPACKUSDW (R11), X9, X2         // c4c2312b13
+	//TODO: VPACKUSDW X2, X9, X2            // c4e2312bd2
+	//TODO: VPACKUSDW X11, X9, X2           // c4c2312bd3
+	//TODO: VPACKUSDW (BX), X9, X11         // c462312b1b
+	//TODO: VPACKUSDW (R11), X9, X11        // c442312b1b
+	//TODO: VPACKUSDW X2, X9, X11           // c462312bda
+	//TODO: VPACKUSDW X11, X9, X11          // c442312bdb
+	//TODO: VPACKUSDW (BX), Y15, Y2         // c4e2052b13
+	//TODO: VPACKUSDW (R11), Y15, Y2        // c4c2052b13
+	//TODO: VPACKUSDW Y2, Y15, Y2           // c4e2052bd2
+	//TODO: VPACKUSDW Y11, Y15, Y2          // c4c2052bd3
+	//TODO: VPACKUSDW (BX), Y15, Y11        // c462052b1b
+	//TODO: VPACKUSDW (R11), Y15, Y11       // c442052b1b
+	//TODO: VPACKUSDW Y2, Y15, Y11          // c462052bda
+	//TODO: VPACKUSDW Y11, Y15, Y11         // c442052bdb
+	//TODO: VPACKUSWB (BX), X9, X2          // c4e1316713 or c5b16713
+	//TODO: VPACKUSWB (R11), X9, X2         // c4c1316713
+	//TODO: VPACKUSWB X2, X9, X2            // c4e13167d2 or c5b167d2
+	//TODO: VPACKUSWB X11, X9, X2           // c4c13167d3
+	//TODO: VPACKUSWB (BX), X9, X11         // c46131671b or c531671b
+	//TODO: VPACKUSWB (R11), X9, X11        // c44131671b
+	//TODO: VPACKUSWB X2, X9, X11           // c4613167da or c53167da
+	//TODO: VPACKUSWB X11, X9, X11          // c4413167db
+	//TODO: VPACKUSWB (BX), Y15, Y2         // c4e1056713 or c5856713
+	//TODO: VPACKUSWB (R11), Y15, Y2        // c4c1056713
+	//TODO: VPACKUSWB Y2, Y15, Y2           // c4e10567d2 or c58567d2
+	//TODO: VPACKUSWB Y11, Y15, Y2          // c4c10567d3
+	//TODO: VPACKUSWB (BX), Y15, Y11        // c46105671b or c505671b
+	//TODO: VPACKUSWB (R11), Y15, Y11       // c44105671b
+	//TODO: VPACKUSWB Y2, Y15, Y11          // c4610567da or c50567da
+	//TODO: VPACKUSWB Y11, Y15, Y11         // c4410567db
+	//TODO: VPADDB (BX), X9, X2             // c4e131fc13 or c5b1fc13
+	//TODO: VPADDB (R11), X9, X2            // c4c131fc13
+	//TODO: VPADDB X2, X9, X2               // c4e131fcd2 or c5b1fcd2
+	//TODO: VPADDB X11, X9, X2              // c4c131fcd3
+	//TODO: VPADDB (BX), X9, X11            // c46131fc1b or c531fc1b
+	//TODO: VPADDB (R11), X9, X11           // c44131fc1b
+	//TODO: VPADDB X2, X9, X11              // c46131fcda or c531fcda
+	//TODO: VPADDB X11, X9, X11             // c44131fcdb
+	//TODO: VPADDB (BX), Y15, Y2            // c4e105fc13 or c585fc13
+	//TODO: VPADDB (R11), Y15, Y2           // c4c105fc13
+	//TODO: VPADDB Y2, Y15, Y2              // c4e105fcd2 or c585fcd2
+	//TODO: VPADDB Y11, Y15, Y2             // c4c105fcd3
+	//TODO: VPADDB (BX), Y15, Y11           // c46105fc1b or c505fc1b
+	//TODO: VPADDB (R11), Y15, Y11          // c44105fc1b
+	//TODO: VPADDB Y2, Y15, Y11             // c46105fcda or c505fcda
+	//TODO: VPADDB Y11, Y15, Y11            // c44105fcdb
+	//TODO: VPADDD (BX), X9, X2             // c4e131fe13 or c5b1fe13
+	//TODO: VPADDD (R11), X9, X2            // c4c131fe13
+	//TODO: VPADDD X2, X9, X2               // c4e131fed2 or c5b1fed2
+	//TODO: VPADDD X11, X9, X2              // c4c131fed3
+	//TODO: VPADDD (BX), X9, X11            // c46131fe1b or c531fe1b
+	//TODO: VPADDD (R11), X9, X11           // c44131fe1b
+	//TODO: VPADDD X2, X9, X11              // c46131feda or c531feda
+	//TODO: VPADDD X11, X9, X11             // c44131fedb
+	//TODO: VPADDD (BX), Y15, Y2            // c4e105fe13 or c585fe13
+	//TODO: VPADDD (R11), Y15, Y2           // c4c105fe13
+	//TODO: VPADDD Y2, Y15, Y2              // c4e105fed2 or c585fed2
+	//TODO: VPADDD Y11, Y15, Y2             // c4c105fed3
+	//TODO: VPADDD (BX), Y15, Y11           // c46105fe1b or c505fe1b
+	//TODO: VPADDD (R11), Y15, Y11          // c44105fe1b
+	//TODO: VPADDD Y2, Y15, Y11             // c46105feda or c505feda
+	//TODO: VPADDD Y11, Y15, Y11            // c44105fedb
+	//TODO: VPADDQ (BX), X9, X2             // c4e131d413 or c5b1d413
+	//TODO: VPADDQ (R11), X9, X2            // c4c131d413
+	//TODO: VPADDQ X2, X9, X2               // c4e131d4d2 or c5b1d4d2
+	//TODO: VPADDQ X11, X9, X2              // c4c131d4d3
+	//TODO: VPADDQ (BX), X9, X11            // c46131d41b or c531d41b
+	//TODO: VPADDQ (R11), X9, X11           // c44131d41b
+	//TODO: VPADDQ X2, X9, X11              // c46131d4da or c531d4da
+	//TODO: VPADDQ X11, X9, X11             // c44131d4db
+	//TODO: VPADDQ (BX), Y15, Y2            // c4e105d413 or c585d413
+	//TODO: VPADDQ (R11), Y15, Y2           // c4c105d413
+	//TODO: VPADDQ Y2, Y15, Y2              // c4e105d4d2 or c585d4d2
+	//TODO: VPADDQ Y11, Y15, Y2             // c4c105d4d3
+	//TODO: VPADDQ (BX), Y15, Y11           // c46105d41b or c505d41b
+	//TODO: VPADDQ (R11), Y15, Y11          // c44105d41b
+	//TODO: VPADDQ Y2, Y15, Y11             // c46105d4da or c505d4da
+	//TODO: VPADDQ Y11, Y15, Y11            // c44105d4db
+	//TODO: VPADDSB (BX), X9, X2            // c4e131ec13 or c5b1ec13
+	//TODO: VPADDSB (R11), X9, X2           // c4c131ec13
+	//TODO: VPADDSB X2, X9, X2              // c4e131ecd2 or c5b1ecd2
+	//TODO: VPADDSB X11, X9, X2             // c4c131ecd3
+	//TODO: VPADDSB (BX), X9, X11           // c46131ec1b or c531ec1b
+	//TODO: VPADDSB (R11), X9, X11          // c44131ec1b
+	//TODO: VPADDSB X2, X9, X11             // c46131ecda or c531ecda
+	//TODO: VPADDSB X11, X9, X11            // c44131ecdb
+	//TODO: VPADDSB (BX), Y15, Y2           // c4e105ec13 or c585ec13
+	//TODO: VPADDSB (R11), Y15, Y2          // c4c105ec13
+	//TODO: VPADDSB Y2, Y15, Y2             // c4e105ecd2 or c585ecd2
+	//TODO: VPADDSB Y11, Y15, Y2            // c4c105ecd3
+	//TODO: VPADDSB (BX), Y15, Y11          // c46105ec1b or c505ec1b
+	//TODO: VPADDSB (R11), Y15, Y11         // c44105ec1b
+	//TODO: VPADDSB Y2, Y15, Y11            // c46105ecda or c505ecda
+	//TODO: VPADDSB Y11, Y15, Y11           // c44105ecdb
+	//TODO: VPADDSW (BX), X9, X2            // c4e131ed13 or c5b1ed13
+	//TODO: VPADDSW (R11), X9, X2           // c4c131ed13
+	//TODO: VPADDSW X2, X9, X2              // c4e131edd2 or c5b1edd2
+	//TODO: VPADDSW X11, X9, X2             // c4c131edd3
+	//TODO: VPADDSW (BX), X9, X11           // c46131ed1b or c531ed1b
+	//TODO: VPADDSW (R11), X9, X11          // c44131ed1b
+	//TODO: VPADDSW X2, X9, X11             // c46131edda or c531edda
+	//TODO: VPADDSW X11, X9, X11            // c44131eddb
+	//TODO: VPADDSW (BX), Y15, Y2           // c4e105ed13 or c585ed13
+	//TODO: VPADDSW (R11), Y15, Y2          // c4c105ed13
+	//TODO: VPADDSW Y2, Y15, Y2             // c4e105edd2 or c585edd2
+	//TODO: VPADDSW Y11, Y15, Y2            // c4c105edd3
+	//TODO: VPADDSW (BX), Y15, Y11          // c46105ed1b or c505ed1b
+	//TODO: VPADDSW (R11), Y15, Y11         // c44105ed1b
+	//TODO: VPADDSW Y2, Y15, Y11            // c46105edda or c505edda
+	//TODO: VPADDSW Y11, Y15, Y11           // c44105eddb
+	//TODO: VPADDUSB (BX), X9, X2           // c4e131dc13 or c5b1dc13
+	//TODO: VPADDUSB (R11), X9, X2          // c4c131dc13
+	//TODO: VPADDUSB X2, X9, X2             // c4e131dcd2 or c5b1dcd2
+	//TODO: VPADDUSB X11, X9, X2            // c4c131dcd3
+	//TODO: VPADDUSB (BX), X9, X11          // c46131dc1b or c531dc1b
+	//TODO: VPADDUSB (R11), X9, X11         // c44131dc1b
+	//TODO: VPADDUSB X2, X9, X11            // c46131dcda or c531dcda
+	//TODO: VPADDUSB X11, X9, X11           // c44131dcdb
+	//TODO: VPADDUSB (BX), Y15, Y2          // c4e105dc13 or c585dc13
+	//TODO: VPADDUSB (R11), Y15, Y2         // c4c105dc13
+	//TODO: VPADDUSB Y2, Y15, Y2            // c4e105dcd2 or c585dcd2
+	//TODO: VPADDUSB Y11, Y15, Y2           // c4c105dcd3
+	//TODO: VPADDUSB (BX), Y15, Y11         // c46105dc1b or c505dc1b
+	//TODO: VPADDUSB (R11), Y15, Y11        // c44105dc1b
+	//TODO: VPADDUSB Y2, Y15, Y11           // c46105dcda or c505dcda
+	//TODO: VPADDUSB Y11, Y15, Y11          // c44105dcdb
+	//TODO: VPADDUSW (BX), X9, X2           // c4e131dd13 or c5b1dd13
+	//TODO: VPADDUSW (R11), X9, X2          // c4c131dd13
+	//TODO: VPADDUSW X2, X9, X2             // c4e131ddd2 or c5b1ddd2
+	//TODO: VPADDUSW X11, X9, X2            // c4c131ddd3
+	//TODO: VPADDUSW (BX), X9, X11          // c46131dd1b or c531dd1b
+	//TODO: VPADDUSW (R11), X9, X11         // c44131dd1b
+	//TODO: VPADDUSW X2, X9, X11            // c46131ddda or c531ddda
+	//TODO: VPADDUSW X11, X9, X11           // c44131dddb
+	//TODO: VPADDUSW (BX), Y15, Y2          // c4e105dd13 or c585dd13
+	//TODO: VPADDUSW (R11), Y15, Y2         // c4c105dd13
+	//TODO: VPADDUSW Y2, Y15, Y2            // c4e105ddd2 or c585ddd2
+	//TODO: VPADDUSW Y11, Y15, Y2           // c4c105ddd3
+	//TODO: VPADDUSW (BX), Y15, Y11         // c46105dd1b or c505dd1b
+	//TODO: VPADDUSW (R11), Y15, Y11        // c44105dd1b
+	//TODO: VPADDUSW Y2, Y15, Y11           // c46105ddda or c505ddda
+	//TODO: VPADDUSW Y11, Y15, Y11          // c44105dddb
+	//TODO: VPADDW (BX), X9, X2             // c4e131fd13 or c5b1fd13
+	//TODO: VPADDW (R11), X9, X2            // c4c131fd13
+	//TODO: VPADDW X2, X9, X2               // c4e131fdd2 or c5b1fdd2
+	//TODO: VPADDW X11, X9, X2              // c4c131fdd3
+	//TODO: VPADDW (BX), X9, X11            // c46131fd1b or c531fd1b
+	//TODO: VPADDW (R11), X9, X11           // c44131fd1b
+	//TODO: VPADDW X2, X9, X11              // c46131fdda or c531fdda
+	//TODO: VPADDW X11, X9, X11             // c44131fddb
+	//TODO: VPADDW (BX), Y15, Y2            // c4e105fd13 or c585fd13
+	//TODO: VPADDW (R11), Y15, Y2           // c4c105fd13
+	//TODO: VPADDW Y2, Y15, Y2              // c4e105fdd2 or c585fdd2
+	//TODO: VPADDW Y11, Y15, Y2             // c4c105fdd3
+	//TODO: VPADDW (BX), Y15, Y11           // c46105fd1b or c505fd1b
+	//TODO: VPADDW (R11), Y15, Y11          // c44105fd1b
+	//TODO: VPADDW Y2, Y15, Y11             // c46105fdda or c505fdda
+	//TODO: VPADDW Y11, Y15, Y11            // c44105fddb
+	//TODO: VPALIGNR $7, (BX), X9, X2       // c4e3310f1307
+	//TODO: VPALIGNR $7, (R11), X9, X2      // c4c3310f1307
+	//TODO: VPALIGNR $7, X2, X9, X2         // c4e3310fd207
+	//TODO: VPALIGNR $7, X11, X9, X2        // c4c3310fd307
+	//TODO: VPALIGNR $7, (BX), X9, X11      // c463310f1b07
+	//TODO: VPALIGNR $7, (R11), X9, X11     // c443310f1b07
+	//TODO: VPALIGNR $7, X2, X9, X11        // c463310fda07
+	//TODO: VPALIGNR $7, X11, X9, X11       // c443310fdb07
+	//TODO: VPALIGNR $7, (BX), Y15, Y2      // c4e3050f1307
+	//TODO: VPALIGNR $7, (R11), Y15, Y2     // c4c3050f1307
+	//TODO: VPALIGNR $7, Y2, Y15, Y2        // c4e3050fd207
+	//TODO: VPALIGNR $7, Y11, Y15, Y2       // c4c3050fd307
+	//TODO: VPALIGNR $7, (BX), Y15, Y11     // c463050f1b07
+	//TODO: VPALIGNR $7, (R11), Y15, Y11    // c443050f1b07
+	//TODO: VPALIGNR $7, Y2, Y15, Y11       // c463050fda07
+	//TODO: VPALIGNR $7, Y11, Y15, Y11      // c443050fdb07
+	VPAND (BX), X9, X2                      // c4e131db13 or c5b1db13
+	VPAND (R11), X9, X2                     // c4c131db13
+	VPAND X2, X9, X2                        // c4e131dbd2 or c5b1dbd2
+	VPAND X11, X9, X2                       // c4c131dbd3
+	VPAND (BX), X9, X11                     // c46131db1b or c531db1b
+	VPAND (R11), X9, X11                    // c44131db1b
+	VPAND X2, X9, X11                       // c46131dbda or c531dbda
+	VPAND X11, X9, X11                      // c44131dbdb
+	VPAND (BX), Y15, Y2                     // c4e105db13 or c585db13
+	VPAND (R11), Y15, Y2                    // c4c105db13
+	VPAND Y2, Y15, Y2                       // c4e105dbd2 or c585dbd2
+	VPAND Y11, Y15, Y2                      // c4c105dbd3
+	VPAND (BX), Y15, Y11                    // c46105db1b or c505db1b
+	VPAND (R11), Y15, Y11                   // c44105db1b
+	VPAND Y2, Y15, Y11                      // c46105dbda or c505dbda
+	VPAND Y11, Y15, Y11                     // c44105dbdb
+	//TODO: VPANDN (BX), X9, X2             // c4e131df13 or c5b1df13
+	//TODO: VPANDN (R11), X9, X2            // c4c131df13
+	//TODO: VPANDN X2, X9, X2               // c4e131dfd2 or c5b1dfd2
+	//TODO: VPANDN X11, X9, X2              // c4c131dfd3
+	//TODO: VPANDN (BX), X9, X11            // c46131df1b or c531df1b
+	//TODO: VPANDN (R11), X9, X11           // c44131df1b
+	//TODO: VPANDN X2, X9, X11              // c46131dfda or c531dfda
+	//TODO: VPANDN X11, X9, X11             // c44131dfdb
+	//TODO: VPANDN (BX), Y15, Y2            // c4e105df13 or c585df13
+	//TODO: VPANDN (R11), Y15, Y2           // c4c105df13
+	//TODO: VPANDN Y2, Y15, Y2              // c4e105dfd2 or c585dfd2
+	//TODO: VPANDN Y11, Y15, Y2             // c4c105dfd3
+	//TODO: VPANDN (BX), Y15, Y11           // c46105df1b or c505df1b
+	//TODO: VPANDN (R11), Y15, Y11          // c44105df1b
+	//TODO: VPANDN Y2, Y15, Y11             // c46105dfda or c505dfda
+	//TODO: VPANDN Y11, Y15, Y11            // c44105dfdb
+	//TODO: VPAVGB (BX), X9, X2             // c4e131e013 or c5b1e013
+	//TODO: VPAVGB (R11), X9, X2            // c4c131e013
+	//TODO: VPAVGB X2, X9, X2               // c4e131e0d2 or c5b1e0d2
+	//TODO: VPAVGB X11, X9, X2              // c4c131e0d3
+	//TODO: VPAVGB (BX), X9, X11            // c46131e01b or c531e01b
+	//TODO: VPAVGB (R11), X9, X11           // c44131e01b
+	//TODO: VPAVGB X2, X9, X11              // c46131e0da or c531e0da
+	//TODO: VPAVGB X11, X9, X11             // c44131e0db
+	//TODO: VPAVGB (BX), Y15, Y2            // c4e105e013 or c585e013
+	//TODO: VPAVGB (R11), Y15, Y2           // c4c105e013
+	//TODO: VPAVGB Y2, Y15, Y2              // c4e105e0d2 or c585e0d2
+	//TODO: VPAVGB Y11, Y15, Y2             // c4c105e0d3
+	//TODO: VPAVGB (BX), Y15, Y11           // c46105e01b or c505e01b
+	//TODO: VPAVGB (R11), Y15, Y11          // c44105e01b
+	//TODO: VPAVGB Y2, Y15, Y11             // c46105e0da or c505e0da
+	//TODO: VPAVGB Y11, Y15, Y11            // c44105e0db
+	//TODO: VPAVGW (BX), X9, X2             // c4e131e313 or c5b1e313
+	//TODO: VPAVGW (R11), X9, X2            // c4c131e313
+	//TODO: VPAVGW X2, X9, X2               // c4e131e3d2 or c5b1e3d2
+	//TODO: VPAVGW X11, X9, X2              // c4c131e3d3
+	//TODO: VPAVGW (BX), X9, X11            // c46131e31b or c531e31b
+	//TODO: VPAVGW (R11), X9, X11           // c44131e31b
+	//TODO: VPAVGW X2, X9, X11              // c46131e3da or c531e3da
+	//TODO: VPAVGW X11, X9, X11             // c44131e3db
+	//TODO: VPAVGW (BX), Y15, Y2            // c4e105e313 or c585e313
+	//TODO: VPAVGW (R11), Y15, Y2           // c4c105e313
+	//TODO: VPAVGW Y2, Y15, Y2              // c4e105e3d2 or c585e3d2
+	//TODO: VPAVGW Y11, Y15, Y2             // c4c105e3d3
+	//TODO: VPAVGW (BX), Y15, Y11           // c46105e31b or c505e31b
+	//TODO: VPAVGW (R11), Y15, Y11          // c44105e31b
+	//TODO: VPAVGW Y2, Y15, Y11             // c46105e3da or c505e3da
+	//TODO: VPAVGW Y11, Y15, Y11            // c44105e3db
+	//TODO: VPBLENDD $7, (BX), X9, X2       // c4e331021307
+	//TODO: VPBLENDD $7, (R11), X9, X2      // c4c331021307
+	//TODO: VPBLENDD $7, X2, X9, X2         // c4e33102d207
+	//TODO: VPBLENDD $7, X11, X9, X2        // c4c33102d307
+	//TODO: VPBLENDD $7, (BX), X9, X11      // c46331021b07
+	//TODO: VPBLENDD $7, (R11), X9, X11     // c44331021b07
+	//TODO: VPBLENDD $7, X2, X9, X11        // c4633102da07
+	//TODO: VPBLENDD $7, X11, X9, X11       // c4433102db07
+	//TODO: VPBLENDD $7, (BX), Y15, Y2      // c4e305021307
+	//TODO: VPBLENDD $7, (R11), Y15, Y2     // c4c305021307
+	//TODO: VPBLENDD $7, Y2, Y15, Y2        // c4e30502d207
+	//TODO: VPBLENDD $7, Y11, Y15, Y2       // c4c30502d307
+	//TODO: VPBLENDD $7, (BX), Y15, Y11     // c46305021b07
+	//TODO: VPBLENDD $7, (R11), Y15, Y11    // c44305021b07
+	//TODO: VPBLENDD $7, Y2, Y15, Y11       // c4630502da07
+	//TODO: VPBLENDD $7, Y11, Y15, Y11      // c4430502db07
+	//TODO: VPBLENDVB XMM12, (BX), X9, X2   // c4e3314c13c0
+	//TODO: VPBLENDVB XMM12, (R11), X9, X2  // c4c3314c13c0
+	//TODO: VPBLENDVB XMM12, X2, X9, X2     // c4e3314cd2c0
+	//TODO: VPBLENDVB XMM12, X11, X9, X2    // c4c3314cd3c0
+	//TODO: VPBLENDVB XMM12, (BX), X9, X11  // c463314c1bc0
+	//TODO: VPBLENDVB XMM12, (R11), X9, X11 // c443314c1bc0
+	//TODO: VPBLENDVB XMM12, X2, X9, X11    // c463314cdac0
+	//TODO: VPBLENDVB XMM12, X11, X9, X11   // c443314cdbc0
+	//TODO: VPBLENDVB YMM13, (BX), Y15, Y2  // c4e3054c13d0
+	//TODO: VPBLENDVB YMM13, (R11), Y15, Y2 // c4c3054c13d0
+	//TODO: VPBLENDVB YMM13, Y2, Y15, Y2    // c4e3054cd2d0
+	//TODO: VPBLENDVB YMM13, Y11, Y15, Y2   // c4c3054cd3d0
+	//TODO: VPBLENDVB YMM13, (BX), Y15, Y11 // c463054c1bd0
+	//TODO: VPBLENDVB YMM13, (R11), Y15, Y11 // c443054c1bd0
+	//TODO: VPBLENDVB YMM13, Y2, Y15, Y11   // c463054cdad0
+	//TODO: VPBLENDVB YMM13, Y11, Y15, Y11  // c443054cdbd0
+	//TODO: VPBLENDW $7, (BX), X9, X2       // c4e3310e1307
+	//TODO: VPBLENDW $7, (R11), X9, X2      // c4c3310e1307
+	//TODO: VPBLENDW $7, X2, X9, X2         // c4e3310ed207
+	//TODO: VPBLENDW $7, X11, X9, X2        // c4c3310ed307
+	//TODO: VPBLENDW $7, (BX), X9, X11      // c463310e1b07
+	//TODO: VPBLENDW $7, (R11), X9, X11     // c443310e1b07
+	//TODO: VPBLENDW $7, X2, X9, X11        // c463310eda07
+	//TODO: VPBLENDW $7, X11, X9, X11       // c443310edb07
+	//TODO: VPBLENDW $7, (BX), Y15, Y2      // c4e3050e1307
+	//TODO: VPBLENDW $7, (R11), Y15, Y2     // c4c3050e1307
+	//TODO: VPBLENDW $7, Y2, Y15, Y2        // c4e3050ed207
+	//TODO: VPBLENDW $7, Y11, Y15, Y2       // c4c3050ed307
+	//TODO: VPBLENDW $7, (BX), Y15, Y11     // c463050e1b07
+	//TODO: VPBLENDW $7, (R11), Y15, Y11    // c443050e1b07
+	//TODO: VPBLENDW $7, Y2, Y15, Y11       // c463050eda07
+	//TODO: VPBLENDW $7, Y11, Y15, Y11      // c443050edb07
+	VPBROADCASTB (BX), X2                   // c4e2797813
+	VPBROADCASTB (R11), X2                  // c4c2797813
+	VPBROADCASTB X2, X2                     // c4e27978d2
+	VPBROADCASTB X11, X2                    // c4c27978d3
+	VPBROADCASTB (BX), X11                  // c46279781b
+	VPBROADCASTB (R11), X11                 // c44279781b
+	VPBROADCASTB X2, X11                    // c4627978da
+	VPBROADCASTB X11, X11                   // c4427978db
+	VPBROADCASTB (BX), Y2                   // c4e27d7813
+	VPBROADCASTB (R11), Y2                  // c4c27d7813
+	VPBROADCASTB X2, Y2                     // c4e27d78d2
+	VPBROADCASTB X11, Y2                    // c4c27d78d3
+	VPBROADCASTB (BX), Y11                  // c4627d781b
+	VPBROADCASTB (R11), Y11                 // c4427d781b
+	VPBROADCASTB X2, Y11                    // c4627d78da
+	VPBROADCASTB X11, Y11                   // c4427d78db
+	//TODO: VPBROADCASTD (BX), X2           // c4e2795813
+	//TODO: VPBROADCASTD (R11), X2          // c4c2795813
+	//TODO: VPBROADCASTD X2, X2             // c4e27958d2
+	//TODO: VPBROADCASTD X11, X2            // c4c27958d3
+	//TODO: VPBROADCASTD (BX), X11          // c46279581b
+	//TODO: VPBROADCASTD (R11), X11         // c44279581b
+	//TODO: VPBROADCASTD X2, X11            // c4627958da
+	//TODO: VPBROADCASTD X11, X11           // c4427958db
+	//TODO: VPBROADCASTD (BX), Y2           // c4e27d5813
+	//TODO: VPBROADCASTD (R11), Y2          // c4c27d5813
+	//TODO: VPBROADCASTD X2, Y2             // c4e27d58d2
+	//TODO: VPBROADCASTD X11, Y2            // c4c27d58d3
+	//TODO: VPBROADCASTD (BX), Y11          // c4627d581b
+	//TODO: VPBROADCASTD (R11), Y11         // c4427d581b
+	//TODO: VPBROADCASTD X2, Y11            // c4627d58da
+	//TODO: VPBROADCASTD X11, Y11           // c4427d58db
+	//TODO: VPBROADCASTQ (BX), X2           // c4e2795913
+	//TODO: VPBROADCASTQ (R11), X2          // c4c2795913
+	//TODO: VPBROADCASTQ X2, X2             // c4e27959d2
+	//TODO: VPBROADCASTQ X11, X2            // c4c27959d3
+	//TODO: VPBROADCASTQ (BX), X11          // c46279591b
+	//TODO: VPBROADCASTQ (R11), X11         // c44279591b
+	//TODO: VPBROADCASTQ X2, X11            // c4627959da
+	//TODO: VPBROADCASTQ X11, X11           // c4427959db
+	//TODO: VPBROADCASTQ (BX), Y2           // c4e27d5913
+	//TODO: VPBROADCASTQ (R11), Y2          // c4c27d5913
+	//TODO: VPBROADCASTQ X2, Y2             // c4e27d59d2
+	//TODO: VPBROADCASTQ X11, Y2            // c4c27d59d3
+	//TODO: VPBROADCASTQ (BX), Y11          // c4627d591b
+	//TODO: VPBROADCASTQ (R11), Y11         // c4427d591b
+	//TODO: VPBROADCASTQ X2, Y11            // c4627d59da
+	//TODO: VPBROADCASTQ X11, Y11           // c4427d59db
+	//TODO: VPBROADCASTW (BX), X2           // c4e2797913
+	//TODO: VPBROADCASTW (R11), X2          // c4c2797913
+	//TODO: VPBROADCASTW X2, X2             // c4e27979d2
+	//TODO: VPBROADCASTW X11, X2            // c4c27979d3
+	//TODO: VPBROADCASTW (BX), X11          // c46279791b
+	//TODO: VPBROADCASTW (R11), X11         // c44279791b
+	//TODO: VPBROADCASTW X2, X11            // c4627979da
+	//TODO: VPBROADCASTW X11, X11           // c4427979db
+	//TODO: VPBROADCASTW (BX), Y2           // c4e27d7913
+	//TODO: VPBROADCASTW (R11), Y2          // c4c27d7913
+	//TODO: VPBROADCASTW X2, Y2             // c4e27d79d2
+	//TODO: VPBROADCASTW X11, Y2            // c4c27d79d3
+	//TODO: VPBROADCASTW (BX), Y11          // c4627d791b
+	//TODO: VPBROADCASTW (R11), Y11         // c4427d791b
+	//TODO: VPBROADCASTW X2, Y11            // c4627d79da
+	//TODO: VPBROADCASTW X11, Y11           // c4427d79db
+	//TODO: VPCLMULQDQ $7, (BX), X9, X2     // c4e331441307
+	//TODO: VPCLMULQDQ $7, (R11), X9, X2    // c4c331441307
+	//TODO: VPCLMULQDQ $7, X2, X9, X2       // c4e33144d207
+	//TODO: VPCLMULQDQ $7, X11, X9, X2      // c4c33144d307
+	//TODO: VPCLMULQDQ $7, (BX), X9, X11    // c46331441b07
+	//TODO: VPCLMULQDQ $7, (R11), X9, X11   // c44331441b07
+	//TODO: VPCLMULQDQ $7, X2, X9, X11      // c4633144da07
+	//TODO: VPCLMULQDQ $7, X11, X9, X11     // c4433144db07
+	VPCMPEQB (BX), X9, X2                   // c4e1317413 or c5b17413
+	VPCMPEQB (R11), X9, X2                  // c4c1317413
+	VPCMPEQB X2, X9, X2                     // c4e13174d2 or c5b174d2
+	VPCMPEQB X11, X9, X2                    // c4c13174d3
+	VPCMPEQB (BX), X9, X11                  // c46131741b or c531741b
+	VPCMPEQB (R11), X9, X11                 // c44131741b
+	VPCMPEQB X2, X9, X11                    // c4613174da or c53174da
+	VPCMPEQB X11, X9, X11                   // c4413174db
+	VPCMPEQB (BX), Y15, Y2                  // c4e1057413 or c5857413
+	VPCMPEQB (R11), Y15, Y2                 // c4c1057413
+	VPCMPEQB Y2, Y15, Y2                    // c4e10574d2 or c58574d2
+	VPCMPEQB Y11, Y15, Y2                   // c4c10574d3
+	VPCMPEQB (BX), Y15, Y11                 // c46105741b or c505741b
+	VPCMPEQB (R11), Y15, Y11                // c44105741b
+	VPCMPEQB Y2, Y15, Y11                   // c4610574da or c50574da
+	VPCMPEQB Y11, Y15, Y11                  // c4410574db
+	//TODO: VPCMPEQD (BX), X9, X2           // c4e1317613 or c5b17613
+	//TODO: VPCMPEQD (R11), X9, X2          // c4c1317613
+	//TODO: VPCMPEQD X2, X9, X2             // c4e13176d2 or c5b176d2
+	//TODO: VPCMPEQD X11, X9, X2            // c4c13176d3
+	//TODO: VPCMPEQD (BX), X9, X11          // c46131761b or c531761b
+	//TODO: VPCMPEQD (R11), X9, X11         // c44131761b
+	//TODO: VPCMPEQD X2, X9, X11            // c4613176da or c53176da
+	//TODO: VPCMPEQD X11, X9, X11           // c4413176db
+	//TODO: VPCMPEQD (BX), Y15, Y2          // c4e1057613 or c5857613
+	//TODO: VPCMPEQD (R11), Y15, Y2         // c4c1057613
+	//TODO: VPCMPEQD Y2, Y15, Y2            // c4e10576d2 or c58576d2
+	//TODO: VPCMPEQD Y11, Y15, Y2           // c4c10576d3
+	//TODO: VPCMPEQD (BX), Y15, Y11         // c46105761b or c505761b
+	//TODO: VPCMPEQD (R11), Y15, Y11        // c44105761b
+	//TODO: VPCMPEQD Y2, Y15, Y11           // c4610576da or c50576da
+	//TODO: VPCMPEQD Y11, Y15, Y11          // c4410576db
+	//TODO: VPCMPEQQ (BX), X9, X2           // c4e2312913
+	//TODO: VPCMPEQQ (R11), X9, X2          // c4c2312913
+	//TODO: VPCMPEQQ X2, X9, X2             // c4e23129d2
+	//TODO: VPCMPEQQ X11, X9, X2            // c4c23129d3
+	//TODO: VPCMPEQQ (BX), X9, X11          // c46231291b
+	//TODO: VPCMPEQQ (R11), X9, X11         // c44231291b
+	//TODO: VPCMPEQQ X2, X9, X11            // c4623129da
+	//TODO: VPCMPEQQ X11, X9, X11           // c4423129db
+	//TODO: VPCMPEQQ (BX), Y15, Y2          // c4e2052913
+	//TODO: VPCMPEQQ (R11), Y15, Y2         // c4c2052913
+	//TODO: VPCMPEQQ Y2, Y15, Y2            // c4e20529d2
+	//TODO: VPCMPEQQ Y11, Y15, Y2           // c4c20529d3
+	//TODO: VPCMPEQQ (BX), Y15, Y11         // c46205291b
+	//TODO: VPCMPEQQ (R11), Y15, Y11        // c44205291b
+	//TODO: VPCMPEQQ Y2, Y15, Y11           // c4620529da
+	//TODO: VPCMPEQQ Y11, Y15, Y11          // c4420529db
+	//TODO: VPCMPEQW (BX), X9, X2           // c4e1317513 or c5b17513
+	//TODO: VPCMPEQW (R11), X9, X2          // c4c1317513
+	//TODO: VPCMPEQW X2, X9, X2             // c4e13175d2 or c5b175d2
+	//TODO: VPCMPEQW X11, X9, X2            // c4c13175d3
+	//TODO: VPCMPEQW (BX), X9, X11          // c46131751b or c531751b
+	//TODO: VPCMPEQW (R11), X9, X11         // c44131751b
+	//TODO: VPCMPEQW X2, X9, X11            // c4613175da or c53175da
+	//TODO: VPCMPEQW X11, X9, X11           // c4413175db
+	//TODO: VPCMPEQW (BX), Y15, Y2          // c4e1057513 or c5857513
+	//TODO: VPCMPEQW (R11), Y15, Y2         // c4c1057513
+	//TODO: VPCMPEQW Y2, Y15, Y2            // c4e10575d2 or c58575d2
+	//TODO: VPCMPEQW Y11, Y15, Y2           // c4c10575d3
+	//TODO: VPCMPEQW (BX), Y15, Y11         // c46105751b or c505751b
+	//TODO: VPCMPEQW (R11), Y15, Y11        // c44105751b
+	//TODO: VPCMPEQW Y2, Y15, Y11           // c4610575da or c50575da
+	//TODO: VPCMPEQW Y11, Y15, Y11          // c4410575db
+	//TODO: VPCMPESTRI $7, (BX), X2         // c4e379611307
+	//TODO: VPCMPESTRI $7, (R11), X2        // c4c379611307
+	//TODO: VPCMPESTRI $7, X2, X2           // c4e37961d207
+	//TODO: VPCMPESTRI $7, X11, X2          // c4c37961d307
+	//TODO: VPCMPESTRI $7, (BX), X11        // c46379611b07
+	//TODO: VPCMPESTRI $7, (R11), X11       // c44379611b07
+	//TODO: VPCMPESTRI $7, X2, X11          // c4637961da07
+	//TODO: VPCMPESTRI $7, X11, X11         // c4437961db07
+	//TODO: VPCMPESTRM $7, (BX), X2         // c4e379601307
+	//TODO: VPCMPESTRM $7, (R11), X2        // c4c379601307
+	//TODO: VPCMPESTRM $7, X2, X2           // c4e37960d207
+	//TODO: VPCMPESTRM $7, X11, X2          // c4c37960d307
+	//TODO: VPCMPESTRM $7, (BX), X11        // c46379601b07
+	//TODO: VPCMPESTRM $7, (R11), X11       // c44379601b07
+	//TODO: VPCMPESTRM $7, X2, X11          // c4637960da07
+	//TODO: VPCMPESTRM $7, X11, X11         // c4437960db07
+	//TODO: VPCMPGTB (BX), X9, X2           // c4e1316413 or c5b16413
+	//TODO: VPCMPGTB (R11), X9, X2          // c4c1316413
+	//TODO: VPCMPGTB X2, X9, X2             // c4e13164d2 or c5b164d2
+	//TODO: VPCMPGTB X11, X9, X2            // c4c13164d3
+	//TODO: VPCMPGTB (BX), X9, X11          // c46131641b or c531641b
+	//TODO: VPCMPGTB (R11), X9, X11         // c44131641b
+	//TODO: VPCMPGTB X2, X9, X11            // c4613164da or c53164da
+	//TODO: VPCMPGTB X11, X9, X11           // c4413164db
+	//TODO: VPCMPGTB (BX), Y15, Y2          // c4e1056413 or c5856413
+	//TODO: VPCMPGTB (R11), Y15, Y2         // c4c1056413
+	//TODO: VPCMPGTB Y2, Y15, Y2            // c4e10564d2 or c58564d2
+	//TODO: VPCMPGTB Y11, Y15, Y2           // c4c10564d3
+	//TODO: VPCMPGTB (BX), Y15, Y11         // c46105641b or c505641b
+	//TODO: VPCMPGTB (R11), Y15, Y11        // c44105641b
+	//TODO: VPCMPGTB Y2, Y15, Y11           // c4610564da or c50564da
+	//TODO: VPCMPGTB Y11, Y15, Y11          // c4410564db
+	//TODO: VPCMPGTD (BX), X9, X2           // c4e1316613 or c5b16613
+	//TODO: VPCMPGTD (R11), X9, X2          // c4c1316613
+	//TODO: VPCMPGTD X2, X9, X2             // c4e13166d2 or c5b166d2
+	//TODO: VPCMPGTD X11, X9, X2            // c4c13166d3
+	//TODO: VPCMPGTD (BX), X9, X11          // c46131661b or c531661b
+	//TODO: VPCMPGTD (R11), X9, X11         // c44131661b
+	//TODO: VPCMPGTD X2, X9, X11            // c4613166da or c53166da
+	//TODO: VPCMPGTD X11, X9, X11           // c4413166db
+	//TODO: VPCMPGTD (BX), Y15, Y2          // c4e1056613 or c5856613
+	//TODO: VPCMPGTD (R11), Y15, Y2         // c4c1056613
+	//TODO: VPCMPGTD Y2, Y15, Y2            // c4e10566d2 or c58566d2
+	//TODO: VPCMPGTD Y11, Y15, Y2           // c4c10566d3
+	//TODO: VPCMPGTD (BX), Y15, Y11         // c46105661b or c505661b
+	//TODO: VPCMPGTD (R11), Y15, Y11        // c44105661b
+	//TODO: VPCMPGTD Y2, Y15, Y11           // c4610566da or c50566da
+	//TODO: VPCMPGTD Y11, Y15, Y11          // c4410566db
+	//TODO: VPCMPGTQ (BX), X9, X2           // c4e2313713
+	//TODO: VPCMPGTQ (R11), X9, X2          // c4c2313713
+	//TODO: VPCMPGTQ X2, X9, X2             // c4e23137d2
+	//TODO: VPCMPGTQ X11, X9, X2            // c4c23137d3
+	//TODO: VPCMPGTQ (BX), X9, X11          // c46231371b
+	//TODO: VPCMPGTQ (R11), X9, X11         // c44231371b
+	//TODO: VPCMPGTQ X2, X9, X11            // c4623137da
+	//TODO: VPCMPGTQ X11, X9, X11           // c4423137db
+	//TODO: VPCMPGTQ (BX), Y15, Y2          // c4e2053713
+	//TODO: VPCMPGTQ (R11), Y15, Y2         // c4c2053713
+	//TODO: VPCMPGTQ Y2, Y15, Y2            // c4e20537d2
+	//TODO: VPCMPGTQ Y11, Y15, Y2           // c4c20537d3
+	//TODO: VPCMPGTQ (BX), Y15, Y11         // c46205371b
+	//TODO: VPCMPGTQ (R11), Y15, Y11        // c44205371b
+	//TODO: VPCMPGTQ Y2, Y15, Y11           // c4620537da
+	//TODO: VPCMPGTQ Y11, Y15, Y11          // c4420537db
+	//TODO: VPCMPGTW (BX), X9, X2           // c4e1316513 or c5b16513
+	//TODO: VPCMPGTW (R11), X9, X2          // c4c1316513
+	//TODO: VPCMPGTW X2, X9, X2             // c4e13165d2 or c5b165d2
+	//TODO: VPCMPGTW X11, X9, X2            // c4c13165d3
+	//TODO: VPCMPGTW (BX), X9, X11          // c46131651b or c531651b
+	//TODO: VPCMPGTW (R11), X9, X11         // c44131651b
+	//TODO: VPCMPGTW X2, X9, X11            // c4613165da or c53165da
+	//TODO: VPCMPGTW X11, X9, X11           // c4413165db
+	//TODO: VPCMPGTW (BX), Y15, Y2          // c4e1056513 or c5856513
+	//TODO: VPCMPGTW (R11), Y15, Y2         // c4c1056513
+	//TODO: VPCMPGTW Y2, Y15, Y2            // c4e10565d2 or c58565d2
+	//TODO: VPCMPGTW Y11, Y15, Y2           // c4c10565d3
+	//TODO: VPCMPGTW (BX), Y15, Y11         // c46105651b or c505651b
+	//TODO: VPCMPGTW (R11), Y15, Y11        // c44105651b
+	//TODO: VPCMPGTW Y2, Y15, Y11           // c4610565da or c50565da
+	//TODO: VPCMPGTW Y11, Y15, Y11          // c4410565db
+	//TODO: VPCMPISTRI $7, (BX), X2         // c4e379631307
+	//TODO: VPCMPISTRI $7, (R11), X2        // c4c379631307
+	//TODO: VPCMPISTRI $7, X2, X2           // c4e37963d207
+	//TODO: VPCMPISTRI $7, X11, X2          // c4c37963d307
+	//TODO: VPCMPISTRI $7, (BX), X11        // c46379631b07
+	//TODO: VPCMPISTRI $7, (R11), X11       // c44379631b07
+	//TODO: VPCMPISTRI $7, X2, X11          // c4637963da07
+	//TODO: VPCMPISTRI $7, X11, X11         // c4437963db07
+	//TODO: VPCMPISTRM $7, (BX), X2         // c4e379621307
+	//TODO: VPCMPISTRM $7, (R11), X2        // c4c379621307
+	//TODO: VPCMPISTRM $7, X2, X2           // c4e37962d207
+	//TODO: VPCMPISTRM $7, X11, X2          // c4c37962d307
+	//TODO: VPCMPISTRM $7, (BX), X11        // c46379621b07
+	//TODO: VPCMPISTRM $7, (R11), X11       // c44379621b07
+	//TODO: VPCMPISTRM $7, X2, X11          // c4637962da07
+	//TODO: VPCMPISTRM $7, X11, X11         // c4437962db07
+	//TODO: VPERM2F128 $7, (BX), Y15, Y2    // c4e305061307
+	//TODO: VPERM2F128 $7, (R11), Y15, Y2   // c4c305061307
+	//TODO: VPERM2F128 $7, Y2, Y15, Y2      // c4e30506d207
+	//TODO: VPERM2F128 $7, Y11, Y15, Y2     // c4c30506d307
+	//TODO: VPERM2F128 $7, (BX), Y15, Y11   // c46305061b07
+	//TODO: VPERM2F128 $7, (R11), Y15, Y11  // c44305061b07
+	//TODO: VPERM2F128 $7, Y2, Y15, Y11     // c4630506da07
+	//TODO: VPERM2F128 $7, Y11, Y15, Y11    // c4430506db07
+	//TODO: VPERM2I128 $7, (BX), Y15, Y2    // c4e305461307
+	//TODO: VPERM2I128 $7, (R11), Y15, Y2   // c4c305461307
+	//TODO: VPERM2I128 $7, Y2, Y15, Y2      // c4e30546d207
+	//TODO: VPERM2I128 $7, Y11, Y15, Y2     // c4c30546d307
+	//TODO: VPERM2I128 $7, (BX), Y15, Y11   // c46305461b07
+	//TODO: VPERM2I128 $7, (R11), Y15, Y11  // c44305461b07
+	//TODO: VPERM2I128 $7, Y2, Y15, Y11     // c4630546da07
+	//TODO: VPERM2I128 $7, Y11, Y15, Y11    // c4430546db07
+	//TODO: VPERMD (BX), Y15, Y2            // c4e2053613
+	//TODO: VPERMD (R11), Y15, Y2           // c4c2053613
+	//TODO: VPERMD Y2, Y15, Y2              // c4e20536d2
+	//TODO: VPERMD Y11, Y15, Y2             // c4c20536d3
+	//TODO: VPERMD (BX), Y15, Y11           // c46205361b
+	//TODO: VPERMD (R11), Y15, Y11          // c44205361b
+	//TODO: VPERMD Y2, Y15, Y11             // c4620536da
+	//TODO: VPERMD Y11, Y15, Y11            // c4420536db
+	//TODO: VPERMILPD $7, (BX), X2          // c4e379051307
+	//TODO: VPERMILPD $7, (R11), X2         // c4c379051307
+	//TODO: VPERMILPD $7, X2, X2            // c4e37905d207
+	//TODO: VPERMILPD $7, X11, X2           // c4c37905d307
+	//TODO: VPERMILPD $7, (BX), X11         // c46379051b07
+	//TODO: VPERMILPD $7, (R11), X11        // c44379051b07
+	//TODO: VPERMILPD $7, X2, X11           // c4637905da07
+	//TODO: VPERMILPD $7, X11, X11          // c4437905db07
+	//TODO: VPERMILPD (BX), X9, X2          // c4e2310d13
+	//TODO: VPERMILPD (R11), X9, X2         // c4c2310d13
+	//TODO: VPERMILPD X2, X9, X2            // c4e2310dd2
+	//TODO: VPERMILPD X11, X9, X2           // c4c2310dd3
+	//TODO: VPERMILPD (BX), X9, X11         // c462310d1b
+	//TODO: VPERMILPD (R11), X9, X11        // c442310d1b
+	//TODO: VPERMILPD X2, X9, X11           // c462310dda
+	//TODO: VPERMILPD X11, X9, X11          // c442310ddb
+	//TODO: VPERMILPD $7, (BX), Y2          // c4e37d051307
+	//TODO: VPERMILPD $7, (R11), Y2         // c4c37d051307
+	//TODO: VPERMILPD $7, Y2, Y2            // c4e37d05d207
+	//TODO: VPERMILPD $7, Y11, Y2           // c4c37d05d307
+	//TODO: VPERMILPD $7, (BX), Y11         // c4637d051b07
+	//TODO: VPERMILPD $7, (R11), Y11        // c4437d051b07
+	//TODO: VPERMILPD $7, Y2, Y11           // c4637d05da07
+	//TODO: VPERMILPD $7, Y11, Y11          // c4437d05db07
+	//TODO: VPERMILPD (BX), Y15, Y2         // c4e2050d13
+	//TODO: VPERMILPD (R11), Y15, Y2        // c4c2050d13
+	//TODO: VPERMILPD Y2, Y15, Y2           // c4e2050dd2
+	//TODO: VPERMILPD Y11, Y15, Y2          // c4c2050dd3
+	//TODO: VPERMILPD (BX), Y15, Y11        // c462050d1b
+	//TODO: VPERMILPD (R11), Y15, Y11       // c442050d1b
+	//TODO: VPERMILPD Y2, Y15, Y11          // c462050dda
+	//TODO: VPERMILPD Y11, Y15, Y11         // c442050ddb
+	//TODO: VPERMILPS $7, (BX), X2          // c4e379041307
+	//TODO: VPERMILPS $7, (R11), X2         // c4c379041307
+	//TODO: VPERMILPS $7, X2, X2            // c4e37904d207
+	//TODO: VPERMILPS $7, X11, X2           // c4c37904d307
+	//TODO: VPERMILPS $7, (BX), X11         // c46379041b07
+	//TODO: VPERMILPS $7, (R11), X11        // c44379041b07
+	//TODO: VPERMILPS $7, X2, X11           // c4637904da07
+	//TODO: VPERMILPS $7, X11, X11          // c4437904db07
+	//TODO: VPERMILPS (BX), X9, X2          // c4e2310c13
+	//TODO: VPERMILPS (R11), X9, X2         // c4c2310c13
+	//TODO: VPERMILPS X2, X9, X2            // c4e2310cd2
+	//TODO: VPERMILPS X11, X9, X2           // c4c2310cd3
+	//TODO: VPERMILPS (BX), X9, X11         // c462310c1b
+	//TODO: VPERMILPS (R11), X9, X11        // c442310c1b
+	//TODO: VPERMILPS X2, X9, X11           // c462310cda
+	//TODO: VPERMILPS X11, X9, X11          // c442310cdb
+	//TODO: VPERMILPS $7, (BX), Y2          // c4e37d041307
+	//TODO: VPERMILPS $7, (R11), Y2         // c4c37d041307
+	//TODO: VPERMILPS $7, Y2, Y2            // c4e37d04d207
+	//TODO: VPERMILPS $7, Y11, Y2           // c4c37d04d307
+	//TODO: VPERMILPS $7, (BX), Y11         // c4637d041b07
+	//TODO: VPERMILPS $7, (R11), Y11        // c4437d041b07
+	//TODO: VPERMILPS $7, Y2, Y11           // c4637d04da07
+	//TODO: VPERMILPS $7, Y11, Y11          // c4437d04db07
+	//TODO: VPERMILPS (BX), Y15, Y2         // c4e2050c13
+	//TODO: VPERMILPS (R11), Y15, Y2        // c4c2050c13
+	//TODO: VPERMILPS Y2, Y15, Y2           // c4e2050cd2
+	//TODO: VPERMILPS Y11, Y15, Y2          // c4c2050cd3
+	//TODO: VPERMILPS (BX), Y15, Y11        // c462050c1b
+	//TODO: VPERMILPS (R11), Y15, Y11       // c442050c1b
+	//TODO: VPERMILPS Y2, Y15, Y11          // c462050cda
+	//TODO: VPERMILPS Y11, Y15, Y11         // c442050cdb
+	//TODO: VPERMPD $7, (BX), Y2            // c4e3fd011307
+	//TODO: VPERMPD $7, (R11), Y2           // c4c3fd011307
+	//TODO: VPERMPD $7, Y2, Y2              // c4e3fd01d207
+	//TODO: VPERMPD $7, Y11, Y2             // c4c3fd01d307
+	//TODO: VPERMPD $7, (BX), Y11           // c463fd011b07
+	//TODO: VPERMPD $7, (R11), Y11          // c443fd011b07
+	//TODO: VPERMPD $7, Y2, Y11             // c463fd01da07
+	//TODO: VPERMPD $7, Y11, Y11            // c443fd01db07
+	//TODO: VPERMPS (BX), Y15, Y2           // c4e2051613
+	//TODO: VPERMPS (R11), Y15, Y2          // c4c2051613
+	//TODO: VPERMPS Y2, Y15, Y2             // c4e20516d2
+	//TODO: VPERMPS Y11, Y15, Y2            // c4c20516d3
+	//TODO: VPERMPS (BX), Y15, Y11          // c46205161b
+	//TODO: VPERMPS (R11), Y15, Y11         // c44205161b
+	//TODO: VPERMPS Y2, Y15, Y11            // c4620516da
+	//TODO: VPERMPS Y11, Y15, Y11           // c4420516db
+	//TODO: VPERMQ $7, (BX), Y2             // c4e3fd001307
+	//TODO: VPERMQ $7, (R11), Y2            // c4c3fd001307
+	//TODO: VPERMQ $7, Y2, Y2               // c4e3fd00d207
+	//TODO: VPERMQ $7, Y11, Y2              // c4c3fd00d307
+	//TODO: VPERMQ $7, (BX), Y11            // c463fd001b07
+	//TODO: VPERMQ $7, (R11), Y11           // c443fd001b07
+	//TODO: VPERMQ $7, Y2, Y11              // c463fd00da07
+	//TODO: VPERMQ $7, Y11, Y11             // c443fd00db07
+	//TODO: VPEXTRB $7, X2, (BX)            // c4e379141307
+	//TODO: VPEXTRB $7, X11, (BX)           // c46379141b07
+	//TODO: VPEXTRB $7, X2, (R11)           // c4c379141307
+	//TODO: VPEXTRB $7, X11, (R11)          // c44379141b07
+	//TODO: VPEXTRB $7, X2, DX              // c4e37914d207
+	//TODO: VPEXTRB $7, X11, DX             // c4637914da07
+	//TODO: VPEXTRB $7, X2, R11             // c4c37914d307
+	//TODO: VPEXTRB $7, X11, R11            // c4437914db07
+	//TODO: VPEXTRD $7, X2, (BX)            // c4e379161307
+	//TODO: VPEXTRD $7, X11, (BX)           // c46379161b07
+	//TODO: VPEXTRD $7, X2, (R11)           // c4c379161307
+	//TODO: VPEXTRD $7, X11, (R11)          // c44379161b07
+	//TODO: VPEXTRD $7, X2, DX              // c4e37916d207
+	//TODO: VPEXTRD $7, X11, DX             // c4637916da07
+	//TODO: VPEXTRD $7, X2, R11             // c4c37916d307
+	//TODO: VPEXTRD $7, X11, R11            // c4437916db07
+	//TODO: VPEXTRQ $7, X2, (BX)            // c4e3f9161307
+	//TODO: VPEXTRQ $7, X11, (BX)           // c463f9161b07
+	//TODO: VPEXTRQ $7, X2, (R11)           // c4c3f9161307
+	//TODO: VPEXTRQ $7, X11, (R11)          // c443f9161b07
+	//TODO: VPEXTRQ $7, X2, DX              // c4e3f916d207
+	//TODO: VPEXTRQ $7, X11, DX             // c463f916da07
+	//TODO: VPEXTRQ $7, X2, R11             // c4c3f916d307
+	//TODO: VPEXTRQ $7, X11, R11            // c443f916db07
+	//TODO: VPEXTRW $7, X2, DX              // c4e179c5d207 or c5f9c5d207 or c4e37915d207
+	//TODO: VPEXTRW $7, X11, DX             // c4c179c5d307 or c4637915da07
+	//TODO: VPEXTRW $7, X2, R11             // c46179c5da07 or c579c5da07 or c4c37915d307
+	//TODO: VPEXTRW $7, X11, R11            // c44179c5db07 or c4437915db07
+	//TODO: VPEXTRW $7, X2, (BX)            // c4e379151307
+	//TODO: VPEXTRW $7, X11, (BX)           // c46379151b07
+	//TODO: VPEXTRW $7, X2, (R11)           // c4c379151307
+	//TODO: VPEXTRW $7, X11, (R11)          // c44379151b07
+	//TODO: VPHADDD (BX), X9, X2            // c4e2310213
+	//TODO: VPHADDD (R11), X9, X2           // c4c2310213
+	//TODO: VPHADDD X2, X9, X2              // c4e23102d2
+	//TODO: VPHADDD X11, X9, X2             // c4c23102d3
+	//TODO: VPHADDD (BX), X9, X11           // c46231021b
+	//TODO: VPHADDD (R11), X9, X11          // c44231021b
+	//TODO: VPHADDD X2, X9, X11             // c4623102da
+	//TODO: VPHADDD X11, X9, X11            // c4423102db
+	//TODO: VPHADDD (BX), Y15, Y2           // c4e2050213
+	//TODO: VPHADDD (R11), Y15, Y2          // c4c2050213
+	//TODO: VPHADDD Y2, Y15, Y2             // c4e20502d2
+	//TODO: VPHADDD Y11, Y15, Y2            // c4c20502d3
+	//TODO: VPHADDD (BX), Y15, Y11          // c46205021b
+	//TODO: VPHADDD (R11), Y15, Y11         // c44205021b
+	//TODO: VPHADDD Y2, Y15, Y11            // c4620502da
+	//TODO: VPHADDD Y11, Y15, Y11           // c4420502db
+	//TODO: VPHADDSW (BX), X9, X2           // c4e2310313
+	//TODO: VPHADDSW (R11), X9, X2          // c4c2310313
+	//TODO: VPHADDSW X2, X9, X2             // c4e23103d2
+	//TODO: VPHADDSW X11, X9, X2            // c4c23103d3
+	//TODO: VPHADDSW (BX), X9, X11          // c46231031b
+	//TODO: VPHADDSW (R11), X9, X11         // c44231031b
+	//TODO: VPHADDSW X2, X9, X11            // c4623103da
+	//TODO: VPHADDSW X11, X9, X11           // c4423103db
+	//TODO: VPHADDSW (BX), Y15, Y2          // c4e2050313
+	//TODO: VPHADDSW (R11), Y15, Y2         // c4c2050313
+	//TODO: VPHADDSW Y2, Y15, Y2            // c4e20503d2
+	//TODO: VPHADDSW Y11, Y15, Y2           // c4c20503d3
+	//TODO: VPHADDSW (BX), Y15, Y11         // c46205031b
+	//TODO: VPHADDSW (R11), Y15, Y11        // c44205031b
+	//TODO: VPHADDSW Y2, Y15, Y11           // c4620503da
+	//TODO: VPHADDSW Y11, Y15, Y11          // c4420503db
+	//TODO: VPHADDW (BX), X9, X2            // c4e2310113
+	//TODO: VPHADDW (R11), X9, X2           // c4c2310113
+	//TODO: VPHADDW X2, X9, X2              // c4e23101d2
+	//TODO: VPHADDW X11, X9, X2             // c4c23101d3
+	//TODO: VPHADDW (BX), X9, X11           // c46231011b
+	//TODO: VPHADDW (R11), X9, X11          // c44231011b
+	//TODO: VPHADDW X2, X9, X11             // c4623101da
+	//TODO: VPHADDW X11, X9, X11            // c4423101db
+	//TODO: VPHADDW (BX), Y15, Y2           // c4e2050113
+	//TODO: VPHADDW (R11), Y15, Y2          // c4c2050113
+	//TODO: VPHADDW Y2, Y15, Y2             // c4e20501d2
+	//TODO: VPHADDW Y11, Y15, Y2            // c4c20501d3
+	//TODO: VPHADDW (BX), Y15, Y11          // c46205011b
+	//TODO: VPHADDW (R11), Y15, Y11         // c44205011b
+	//TODO: VPHADDW Y2, Y15, Y11            // c4620501da
+	//TODO: VPHADDW Y11, Y15, Y11           // c4420501db
+	//TODO: VPHMINPOSUW (BX), X2            // c4e2794113
+	//TODO: VPHMINPOSUW (R11), X2           // c4c2794113
+	//TODO: VPHMINPOSUW X2, X2              // c4e27941d2
+	//TODO: VPHMINPOSUW X11, X2             // c4c27941d3
+	//TODO: VPHMINPOSUW (BX), X11           // c46279411b
+	//TODO: VPHMINPOSUW (R11), X11          // c44279411b
+	//TODO: VPHMINPOSUW X2, X11             // c4627941da
+	//TODO: VPHMINPOSUW X11, X11            // c4427941db
+	//TODO: VPHSUBD (BX), X9, X2            // c4e2310613
+	//TODO: VPHSUBD (R11), X9, X2           // c4c2310613
+	//TODO: VPHSUBD X2, X9, X2              // c4e23106d2
+	//TODO: VPHSUBD X11, X9, X2             // c4c23106d3
+	//TODO: VPHSUBD (BX), X9, X11           // c46231061b
+	//TODO: VPHSUBD (R11), X9, X11          // c44231061b
+	//TODO: VPHSUBD X2, X9, X11             // c4623106da
+	//TODO: VPHSUBD X11, X9, X11            // c4423106db
+	//TODO: VPHSUBD (BX), Y15, Y2           // c4e2050613
+	//TODO: VPHSUBD (R11), Y15, Y2          // c4c2050613
+	//TODO: VPHSUBD Y2, Y15, Y2             // c4e20506d2
+	//TODO: VPHSUBD Y11, Y15, Y2            // c4c20506d3
+	//TODO: VPHSUBD (BX), Y15, Y11          // c46205061b
+	//TODO: VPHSUBD (R11), Y15, Y11         // c44205061b
+	//TODO: VPHSUBD Y2, Y15, Y11            // c4620506da
+	//TODO: VPHSUBD Y11, Y15, Y11           // c4420506db
+	//TODO: VPHSUBSW (BX), X9, X2           // c4e2310713
+	//TODO: VPHSUBSW (R11), X9, X2          // c4c2310713
+	//TODO: VPHSUBSW X2, X9, X2             // c4e23107d2
+	//TODO: VPHSUBSW X11, X9, X2            // c4c23107d3
+	//TODO: VPHSUBSW (BX), X9, X11          // c46231071b
+	//TODO: VPHSUBSW (R11), X9, X11         // c44231071b
+	//TODO: VPHSUBSW X2, X9, X11            // c4623107da
+	//TODO: VPHSUBSW X11, X9, X11           // c4423107db
+	//TODO: VPHSUBSW (BX), Y15, Y2          // c4e2050713
+	//TODO: VPHSUBSW (R11), Y15, Y2         // c4c2050713
+	//TODO: VPHSUBSW Y2, Y15, Y2            // c4e20507d2
+	//TODO: VPHSUBSW Y11, Y15, Y2           // c4c20507d3
+	//TODO: VPHSUBSW (BX), Y15, Y11         // c46205071b
+	//TODO: VPHSUBSW (R11), Y15, Y11        // c44205071b
+	//TODO: VPHSUBSW Y2, Y15, Y11           // c4620507da
+	//TODO: VPHSUBSW Y11, Y15, Y11          // c4420507db
+	//TODO: VPHSUBW (BX), X9, X2            // c4e2310513
+	//TODO: VPHSUBW (R11), X9, X2           // c4c2310513
+	//TODO: VPHSUBW X2, X9, X2              // c4e23105d2
+	//TODO: VPHSUBW X11, X9, X2             // c4c23105d3
+	//TODO: VPHSUBW (BX), X9, X11           // c46231051b
+	//TODO: VPHSUBW (R11), X9, X11          // c44231051b
+	//TODO: VPHSUBW X2, X9, X11             // c4623105da
+	//TODO: VPHSUBW X11, X9, X11            // c4423105db
+	//TODO: VPHSUBW (BX), Y15, Y2           // c4e2050513
+	//TODO: VPHSUBW (R11), Y15, Y2          // c4c2050513
+	//TODO: VPHSUBW Y2, Y15, Y2             // c4e20505d2
+	//TODO: VPHSUBW Y11, Y15, Y2            // c4c20505d3
+	//TODO: VPHSUBW (BX), Y15, Y11          // c46205051b
+	//TODO: VPHSUBW (R11), Y15, Y11         // c44205051b
+	//TODO: VPHSUBW Y2, Y15, Y11            // c4620505da
+	//TODO: VPHSUBW Y11, Y15, Y11           // c4420505db
+	//TODO: VPINSRB $7, (BX), X9, X2        // c4e331201307
+	//TODO: VPINSRB $7, (R11), X9, X2       // c4c331201307
+	//TODO: VPINSRB $7, DX, X9, X2          // c4e33120d207
+	//TODO: VPINSRB $7, R11, X9, X2         // c4c33120d307
+	//TODO: VPINSRB $7, (BX), X9, X11       // c46331201b07
+	//TODO: VPINSRB $7, (R11), X9, X11      // c44331201b07
+	//TODO: VPINSRB $7, DX, X9, X11         // c4633120da07
+	//TODO: VPINSRB $7, R11, X9, X11        // c4433120db07
+	//TODO: VPINSRD $7, (BX), X9, X2        // c4e331221307
+	//TODO: VPINSRD $7, (R11), X9, X2       // c4c331221307
+	//TODO: VPINSRD $7, DX, X9, X2          // c4e33122d207
+	//TODO: VPINSRD $7, R11, X9, X2         // c4c33122d307
+	//TODO: VPINSRD $7, (BX), X9, X11       // c46331221b07
+	//TODO: VPINSRD $7, (R11), X9, X11      // c44331221b07
+	//TODO: VPINSRD $7, DX, X9, X11         // c4633122da07
+	//TODO: VPINSRD $7, R11, X9, X11        // c4433122db07
+	//TODO: VPINSRQ $7, (BX), X9, X2        // c4e3b1221307
+	//TODO: VPINSRQ $7, (R11), X9, X2       // c4c3b1221307
+	//TODO: VPINSRQ $7, DX, X9, X2          // c4e3b122d207
+	//TODO: VPINSRQ $7, R11, X9, X2         // c4c3b122d307
+	//TODO: VPINSRQ $7, (BX), X9, X11       // c463b1221b07
+	//TODO: VPINSRQ $7, (R11), X9, X11      // c443b1221b07
+	//TODO: VPINSRQ $7, DX, X9, X11         // c463b122da07
+	//TODO: VPINSRQ $7, R11, X9, X11        // c443b122db07
+	//TODO: VPINSRW $7, (BX), X9, X2        // c4e131c41307 or c5b1c41307
+	//TODO: VPINSRW $7, (R11), X9, X2       // c4c131c41307
+	//TODO: VPINSRW $7, DX, X9, X2          // c4e131c4d207 or c5b1c4d207
+	//TODO: VPINSRW $7, R11, X9, X2         // c4c131c4d307
+	//TODO: VPINSRW $7, (BX), X9, X11       // c46131c41b07 or c531c41b07
+	//TODO: VPINSRW $7, (R11), X9, X11      // c44131c41b07
+	//TODO: VPINSRW $7, DX, X9, X11         // c46131c4da07 or c531c4da07
+	//TODO: VPINSRW $7, R11, X9, X11        // c44131c4db07
+	//TODO: VPMADDUBSW (BX), X9, X2         // c4e2310413
+	//TODO: VPMADDUBSW (R11), X9, X2        // c4c2310413
+	//TODO: VPMADDUBSW X2, X9, X2           // c4e23104d2
+	//TODO: VPMADDUBSW X11, X9, X2          // c4c23104d3
+	//TODO: VPMADDUBSW (BX), X9, X11        // c46231041b
+	//TODO: VPMADDUBSW (R11), X9, X11       // c44231041b
+	//TODO: VPMADDUBSW X2, X9, X11          // c4623104da
+	//TODO: VPMADDUBSW X11, X9, X11         // c4423104db
+	//TODO: VPMADDUBSW (BX), Y15, Y2        // c4e2050413
+	//TODO: VPMADDUBSW (R11), Y15, Y2       // c4c2050413
+	//TODO: VPMADDUBSW Y2, Y15, Y2          // c4e20504d2
+	//TODO: VPMADDUBSW Y11, Y15, Y2         // c4c20504d3
+	//TODO: VPMADDUBSW (BX), Y15, Y11       // c46205041b
+	//TODO: VPMADDUBSW (R11), Y15, Y11      // c44205041b
+	//TODO: VPMADDUBSW Y2, Y15, Y11         // c4620504da
+	//TODO: VPMADDUBSW Y11, Y15, Y11        // c4420504db
+	//TODO: VPMADDWD (BX), X9, X2           // c4e131f513 or c5b1f513
+	//TODO: VPMADDWD (R11), X9, X2          // c4c131f513
+	//TODO: VPMADDWD X2, X9, X2             // c4e131f5d2 or c5b1f5d2
+	//TODO: VPMADDWD X11, X9, X2            // c4c131f5d3
+	//TODO: VPMADDWD (BX), X9, X11          // c46131f51b or c531f51b
+	//TODO: VPMADDWD (R11), X9, X11         // c44131f51b
+	//TODO: VPMADDWD X2, X9, X11            // c46131f5da or c531f5da
+	//TODO: VPMADDWD X11, X9, X11           // c44131f5db
+	//TODO: VPMADDWD (BX), Y15, Y2          // c4e105f513 or c585f513
+	//TODO: VPMADDWD (R11), Y15, Y2         // c4c105f513
+	//TODO: VPMADDWD Y2, Y15, Y2            // c4e105f5d2 or c585f5d2
+	//TODO: VPMADDWD Y11, Y15, Y2           // c4c105f5d3
+	//TODO: VPMADDWD (BX), Y15, Y11         // c46105f51b or c505f51b
+	//TODO: VPMADDWD (R11), Y15, Y11        // c44105f51b
+	//TODO: VPMADDWD Y2, Y15, Y11           // c46105f5da or c505f5da
+	//TODO: VPMADDWD Y11, Y15, Y11          // c44105f5db
+	//TODO: VPMASKMOVD X2, X9, (BX)         // c4e2318e13
+	//TODO: VPMASKMOVD X11, X9, (BX)        // c462318e1b
+	//TODO: VPMASKMOVD X2, X9, (R11)        // c4c2318e13
+	//TODO: VPMASKMOVD X11, X9, (R11)       // c442318e1b
+	//TODO: VPMASKMOVD Y2, Y15, (BX)        // c4e2058e13
+	//TODO: VPMASKMOVD Y11, Y15, (BX)       // c462058e1b
+	//TODO: VPMASKMOVD Y2, Y15, (R11)       // c4c2058e13
+	//TODO: VPMASKMOVD Y11, Y15, (R11)      // c442058e1b
+	//TODO: VPMASKMOVD (BX), X9, X2         // c4e2318c13
+	//TODO: VPMASKMOVD (R11), X9, X2        // c4c2318c13
+	//TODO: VPMASKMOVD (BX), X9, X11        // c462318c1b
+	//TODO: VPMASKMOVD (R11), X9, X11       // c442318c1b
+	//TODO: VPMASKMOVD (BX), Y15, Y2        // c4e2058c13
+	//TODO: VPMASKMOVD (R11), Y15, Y2       // c4c2058c13
+	//TODO: VPMASKMOVD (BX), Y15, Y11       // c462058c1b
+	//TODO: VPMASKMOVD (R11), Y15, Y11      // c442058c1b
+	//TODO: VPMASKMOVQ X2, X9, (BX)         // c4e2b18e13
+	//TODO: VPMASKMOVQ X11, X9, (BX)        // c462b18e1b
+	//TODO: VPMASKMOVQ X2, X9, (R11)        // c4c2b18e13
+	//TODO: VPMASKMOVQ X11, X9, (R11)       // c442b18e1b
+	//TODO: VPMASKMOVQ Y2, Y15, (BX)        // c4e2858e13
+	//TODO: VPMASKMOVQ Y11, Y15, (BX)       // c462858e1b
+	//TODO: VPMASKMOVQ Y2, Y15, (R11)       // c4c2858e13
+	//TODO: VPMASKMOVQ Y11, Y15, (R11)      // c442858e1b
+	//TODO: VPMASKMOVQ (BX), X9, X2         // c4e2b18c13
+	//TODO: VPMASKMOVQ (R11), X9, X2        // c4c2b18c13
+	//TODO: VPMASKMOVQ (BX), X9, X11        // c462b18c1b
+	//TODO: VPMASKMOVQ (R11), X9, X11       // c442b18c1b
+	//TODO: VPMASKMOVQ (BX), Y15, Y2        // c4e2858c13
+	//TODO: VPMASKMOVQ (R11), Y15, Y2       // c4c2858c13
+	//TODO: VPMASKMOVQ (BX), Y15, Y11       // c462858c1b
+	//TODO: VPMASKMOVQ (R11), Y15, Y11      // c442858c1b
+	//TODO: VPMAXSB (BX), X9, X2            // c4e2313c13
+	//TODO: VPMAXSB (R11), X9, X2           // c4c2313c13
+	//TODO: VPMAXSB X2, X9, X2              // c4e2313cd2
+	//TODO: VPMAXSB X11, X9, X2             // c4c2313cd3
+	//TODO: VPMAXSB (BX), X9, X11           // c462313c1b
+	//TODO: VPMAXSB (R11), X9, X11          // c442313c1b
+	//TODO: VPMAXSB X2, X9, X11             // c462313cda
+	//TODO: VPMAXSB X11, X9, X11            // c442313cdb
+	//TODO: VPMAXSB (BX), Y15, Y2           // c4e2053c13
+	//TODO: VPMAXSB (R11), Y15, Y2          // c4c2053c13
+	//TODO: VPMAXSB Y2, Y15, Y2             // c4e2053cd2
+	//TODO: VPMAXSB Y11, Y15, Y2            // c4c2053cd3
+	//TODO: VPMAXSB (BX), Y15, Y11          // c462053c1b
+	//TODO: VPMAXSB (R11), Y15, Y11         // c442053c1b
+	//TODO: VPMAXSB Y2, Y15, Y11            // c462053cda
+	//TODO: VPMAXSB Y11, Y15, Y11           // c442053cdb
+	//TODO: VPMAXSD (BX), X9, X2            // c4e2313d13
+	//TODO: VPMAXSD (R11), X9, X2           // c4c2313d13
+	//TODO: VPMAXSD X2, X9, X2              // c4e2313dd2
+	//TODO: VPMAXSD X11, X9, X2             // c4c2313dd3
+	//TODO: VPMAXSD (BX), X9, X11           // c462313d1b
+	//TODO: VPMAXSD (R11), X9, X11          // c442313d1b
+	//TODO: VPMAXSD X2, X9, X11             // c462313dda
+	//TODO: VPMAXSD X11, X9, X11            // c442313ddb
+	//TODO: VPMAXSD (BX), Y15, Y2           // c4e2053d13
+	//TODO: VPMAXSD (R11), Y15, Y2          // c4c2053d13
+	//TODO: VPMAXSD Y2, Y15, Y2             // c4e2053dd2
+	//TODO: VPMAXSD Y11, Y15, Y2            // c4c2053dd3
+	//TODO: VPMAXSD (BX), Y15, Y11          // c462053d1b
+	//TODO: VPMAXSD (R11), Y15, Y11         // c442053d1b
+	//TODO: VPMAXSD Y2, Y15, Y11            // c462053dda
+	//TODO: VPMAXSD Y11, Y15, Y11           // c442053ddb
+	//TODO: VPMAXSW (BX), X9, X2            // c4e131ee13 or c5b1ee13
+	//TODO: VPMAXSW (R11), X9, X2           // c4c131ee13
+	//TODO: VPMAXSW X2, X9, X2              // c4e131eed2 or c5b1eed2
+	//TODO: VPMAXSW X11, X9, X2             // c4c131eed3
+	//TODO: VPMAXSW (BX), X9, X11           // c46131ee1b or c531ee1b
+	//TODO: VPMAXSW (R11), X9, X11          // c44131ee1b
+	//TODO: VPMAXSW X2, X9, X11             // c46131eeda or c531eeda
+	//TODO: VPMAXSW X11, X9, X11            // c44131eedb
+	//TODO: VPMAXSW (BX), Y15, Y2           // c4e105ee13 or c585ee13
+	//TODO: VPMAXSW (R11), Y15, Y2          // c4c105ee13
+	//TODO: VPMAXSW Y2, Y15, Y2             // c4e105eed2 or c585eed2
+	//TODO: VPMAXSW Y11, Y15, Y2            // c4c105eed3
+	//TODO: VPMAXSW (BX), Y15, Y11          // c46105ee1b or c505ee1b
+	//TODO: VPMAXSW (R11), Y15, Y11         // c44105ee1b
+	//TODO: VPMAXSW Y2, Y15, Y11            // c46105eeda or c505eeda
+	//TODO: VPMAXSW Y11, Y15, Y11           // c44105eedb
+	//TODO: VPMAXUB (BX), X9, X2            // c4e131de13 or c5b1de13
+	//TODO: VPMAXUB (R11), X9, X2           // c4c131de13
+	//TODO: VPMAXUB X2, X9, X2              // c4e131ded2 or c5b1ded2
+	//TODO: VPMAXUB X11, X9, X2             // c4c131ded3
+	//TODO: VPMAXUB (BX), X9, X11           // c46131de1b or c531de1b
+	//TODO: VPMAXUB (R11), X9, X11          // c44131de1b
+	//TODO: VPMAXUB X2, X9, X11             // c46131deda or c531deda
+	//TODO: VPMAXUB X11, X9, X11            // c44131dedb
+	//TODO: VPMAXUB (BX), Y15, Y2           // c4e105de13 or c585de13
+	//TODO: VPMAXUB (R11), Y15, Y2          // c4c105de13
+	//TODO: VPMAXUB Y2, Y15, Y2             // c4e105ded2 or c585ded2
+	//TODO: VPMAXUB Y11, Y15, Y2            // c4c105ded3
+	//TODO: VPMAXUB (BX), Y15, Y11          // c46105de1b or c505de1b
+	//TODO: VPMAXUB (R11), Y15, Y11         // c44105de1b
+	//TODO: VPMAXUB Y2, Y15, Y11            // c46105deda or c505deda
+	//TODO: VPMAXUB Y11, Y15, Y11           // c44105dedb
+	//TODO: VPMAXUD (BX), X9, X2            // c4e2313f13
+	//TODO: VPMAXUD (R11), X9, X2           // c4c2313f13
+	//TODO: VPMAXUD X2, X9, X2              // c4e2313fd2
+	//TODO: VPMAXUD X11, X9, X2             // c4c2313fd3
+	//TODO: VPMAXUD (BX), X9, X11           // c462313f1b
+	//TODO: VPMAXUD (R11), X9, X11          // c442313f1b
+	//TODO: VPMAXUD X2, X9, X11             // c462313fda
+	//TODO: VPMAXUD X11, X9, X11            // c442313fdb
+	//TODO: VPMAXUD (BX), Y15, Y2           // c4e2053f13
+	//TODO: VPMAXUD (R11), Y15, Y2          // c4c2053f13
+	//TODO: VPMAXUD Y2, Y15, Y2             // c4e2053fd2
+	//TODO: VPMAXUD Y11, Y15, Y2            // c4c2053fd3
+	//TODO: VPMAXUD (BX), Y15, Y11          // c462053f1b
+	//TODO: VPMAXUD (R11), Y15, Y11         // c442053f1b
+	//TODO: VPMAXUD Y2, Y15, Y11            // c462053fda
+	//TODO: VPMAXUD Y11, Y15, Y11           // c442053fdb
+	//TODO: VPMAXUW (BX), X9, X2            // c4e2313e13
+	//TODO: VPMAXUW (R11), X9, X2           // c4c2313e13
+	//TODO: VPMAXUW X2, X9, X2              // c4e2313ed2
+	//TODO: VPMAXUW X11, X9, X2             // c4c2313ed3
+	//TODO: VPMAXUW (BX), X9, X11           // c462313e1b
+	//TODO: VPMAXUW (R11), X9, X11          // c442313e1b
+	//TODO: VPMAXUW X2, X9, X11             // c462313eda
+	//TODO: VPMAXUW X11, X9, X11            // c442313edb
+	//TODO: VPMAXUW (BX), Y15, Y2           // c4e2053e13
+	//TODO: VPMAXUW (R11), Y15, Y2          // c4c2053e13
+	//TODO: VPMAXUW Y2, Y15, Y2             // c4e2053ed2
+	//TODO: VPMAXUW Y11, Y15, Y2            // c4c2053ed3
+	//TODO: VPMAXUW (BX), Y15, Y11          // c462053e1b
+	//TODO: VPMAXUW (R11), Y15, Y11         // c442053e1b
+	//TODO: VPMAXUW Y2, Y15, Y11            // c462053eda
+	//TODO: VPMAXUW Y11, Y15, Y11           // c442053edb
+	//TODO: VPMINSB (BX), X9, X2            // c4e2313813
+	//TODO: VPMINSB (R11), X9, X2           // c4c2313813
+	//TODO: VPMINSB X2, X9, X2              // c4e23138d2
+	//TODO: VPMINSB X11, X9, X2             // c4c23138d3
+	//TODO: VPMINSB (BX), X9, X11           // c46231381b
+	//TODO: VPMINSB (R11), X9, X11          // c44231381b
+	//TODO: VPMINSB X2, X9, X11             // c4623138da
+	//TODO: VPMINSB X11, X9, X11            // c4423138db
+	//TODO: VPMINSB (BX), Y15, Y2           // c4e2053813
+	//TODO: VPMINSB (R11), Y15, Y2          // c4c2053813
+	//TODO: VPMINSB Y2, Y15, Y2             // c4e20538d2
+	//TODO: VPMINSB Y11, Y15, Y2            // c4c20538d3
+	//TODO: VPMINSB (BX), Y15, Y11          // c46205381b
+	//TODO: VPMINSB (R11), Y15, Y11         // c44205381b
+	//TODO: VPMINSB Y2, Y15, Y11            // c4620538da
+	//TODO: VPMINSB Y11, Y15, Y11           // c4420538db
+	//TODO: VPMINSD (BX), X9, X2            // c4e2313913
+	//TODO: VPMINSD (R11), X9, X2           // c4c2313913
+	//TODO: VPMINSD X2, X9, X2              // c4e23139d2
+	//TODO: VPMINSD X11, X9, X2             // c4c23139d3
+	//TODO: VPMINSD (BX), X9, X11           // c46231391b
+	//TODO: VPMINSD (R11), X9, X11          // c44231391b
+	//TODO: VPMINSD X2, X9, X11             // c4623139da
+	//TODO: VPMINSD X11, X9, X11            // c4423139db
+	//TODO: VPMINSD (BX), Y15, Y2           // c4e2053913
+	//TODO: VPMINSD (R11), Y15, Y2          // c4c2053913
+	//TODO: VPMINSD Y2, Y15, Y2             // c4e20539d2
+	//TODO: VPMINSD Y11, Y15, Y2            // c4c20539d3
+	//TODO: VPMINSD (BX), Y15, Y11          // c46205391b
+	//TODO: VPMINSD (R11), Y15, Y11         // c44205391b
+	//TODO: VPMINSD Y2, Y15, Y11            // c4620539da
+	//TODO: VPMINSD Y11, Y15, Y11           // c4420539db
+	//TODO: VPMINSW (BX), X9, X2            // c4e131ea13 or c5b1ea13
+	//TODO: VPMINSW (R11), X9, X2           // c4c131ea13
+	//TODO: VPMINSW X2, X9, X2              // c4e131ead2 or c5b1ead2
+	//TODO: VPMINSW X11, X9, X2             // c4c131ead3
+	//TODO: VPMINSW (BX), X9, X11           // c46131ea1b or c531ea1b
+	//TODO: VPMINSW (R11), X9, X11          // c44131ea1b
+	//TODO: VPMINSW X2, X9, X11             // c46131eada or c531eada
+	//TODO: VPMINSW X11, X9, X11            // c44131eadb
+	//TODO: VPMINSW (BX), Y15, Y2           // c4e105ea13 or c585ea13
+	//TODO: VPMINSW (R11), Y15, Y2          // c4c105ea13
+	//TODO: VPMINSW Y2, Y15, Y2             // c4e105ead2 or c585ead2
+	//TODO: VPMINSW Y11, Y15, Y2            // c4c105ead3
+	//TODO: VPMINSW (BX), Y15, Y11          // c46105ea1b or c505ea1b
+	//TODO: VPMINSW (R11), Y15, Y11         // c44105ea1b
+	//TODO: VPMINSW Y2, Y15, Y11            // c46105eada or c505eada
+	//TODO: VPMINSW Y11, Y15, Y11           // c44105eadb
+	//TODO: VPMINUB (BX), X9, X2            // c4e131da13 or c5b1da13
+	//TODO: VPMINUB (R11), X9, X2           // c4c131da13
+	//TODO: VPMINUB X2, X9, X2              // c4e131dad2 or c5b1dad2
+	//TODO: VPMINUB X11, X9, X2             // c4c131dad3
+	//TODO: VPMINUB (BX), X9, X11           // c46131da1b or c531da1b
+	//TODO: VPMINUB (R11), X9, X11          // c44131da1b
+	//TODO: VPMINUB X2, X9, X11             // c46131dada or c531dada
+	//TODO: VPMINUB X11, X9, X11            // c44131dadb
+	//TODO: VPMINUB (BX), Y15, Y2           // c4e105da13 or c585da13
+	//TODO: VPMINUB (R11), Y15, Y2          // c4c105da13
+	//TODO: VPMINUB Y2, Y15, Y2             // c4e105dad2 or c585dad2
+	//TODO: VPMINUB Y11, Y15, Y2            // c4c105dad3
+	//TODO: VPMINUB (BX), Y15, Y11          // c46105da1b or c505da1b
+	//TODO: VPMINUB (R11), Y15, Y11         // c44105da1b
+	//TODO: VPMINUB Y2, Y15, Y11            // c46105dada or c505dada
+	//TODO: VPMINUB Y11, Y15, Y11           // c44105dadb
+	//TODO: VPMINUD (BX), X9, X2            // c4e2313b13
+	//TODO: VPMINUD (R11), X9, X2           // c4c2313b13
+	//TODO: VPMINUD X2, X9, X2              // c4e2313bd2
+	//TODO: VPMINUD X11, X9, X2             // c4c2313bd3
+	//TODO: VPMINUD (BX), X9, X11           // c462313b1b
+	//TODO: VPMINUD (R11), X9, X11          // c442313b1b
+	//TODO: VPMINUD X2, X9, X11             // c462313bda
+	//TODO: VPMINUD X11, X9, X11            // c442313bdb
+	//TODO: VPMINUD (BX), Y15, Y2           // c4e2053b13
+	//TODO: VPMINUD (R11), Y15, Y2          // c4c2053b13
+	//TODO: VPMINUD Y2, Y15, Y2             // c4e2053bd2
+	//TODO: VPMINUD Y11, Y15, Y2            // c4c2053bd3
+	//TODO: VPMINUD (BX), Y15, Y11          // c462053b1b
+	//TODO: VPMINUD (R11), Y15, Y11         // c442053b1b
+	//TODO: VPMINUD Y2, Y15, Y11            // c462053bda
+	//TODO: VPMINUD Y11, Y15, Y11           // c442053bdb
+	//TODO: VPMINUW (BX), X9, X2            // c4e2313a13
+	//TODO: VPMINUW (R11), X9, X2           // c4c2313a13
+	//TODO: VPMINUW X2, X9, X2              // c4e2313ad2
+	//TODO: VPMINUW X11, X9, X2             // c4c2313ad3
+	//TODO: VPMINUW (BX), X9, X11           // c462313a1b
+	//TODO: VPMINUW (R11), X9, X11          // c442313a1b
+	//TODO: VPMINUW X2, X9, X11             // c462313ada
+	//TODO: VPMINUW X11, X9, X11            // c442313adb
+	//TODO: VPMINUW (BX), Y15, Y2           // c4e2053a13
+	//TODO: VPMINUW (R11), Y15, Y2          // c4c2053a13
+	//TODO: VPMINUW Y2, Y15, Y2             // c4e2053ad2
+	//TODO: VPMINUW Y11, Y15, Y2            // c4c2053ad3
+	//TODO: VPMINUW (BX), Y15, Y11          // c462053a1b
+	//TODO: VPMINUW (R11), Y15, Y11         // c442053a1b
+	//TODO: VPMINUW Y2, Y15, Y11            // c462053ada
+	//TODO: VPMINUW Y11, Y15, Y11           // c442053adb
+	VPMOVMSKB X2, DX                        // c4e179d7d2 or c5f9d7d2
+	VPMOVMSKB X11, DX                       // c4c179d7d3
+	VPMOVMSKB X2, R11                       // c46179d7da or c579d7da
+	VPMOVMSKB X11, R11                      // c44179d7db
+	VPMOVMSKB Y2, DX                        // c4e17dd7d2 or c5fdd7d2
+	VPMOVMSKB Y11, DX                       // c4c17dd7d3
+	VPMOVMSKB Y2, R11                       // c4617dd7da or c57dd7da
+	VPMOVMSKB Y11, R11                      // c4417dd7db
+	//TODO: VPMOVSXBD (BX), X2              // c4e2792113
+	//TODO: VPMOVSXBD (R11), X2             // c4c2792113
+	//TODO: VPMOVSXBD X2, X2                // c4e27921d2
+	//TODO: VPMOVSXBD X11, X2               // c4c27921d3
+	//TODO: VPMOVSXBD (BX), X11             // c46279211b
+	//TODO: VPMOVSXBD (R11), X11            // c44279211b
+	//TODO: VPMOVSXBD X2, X11               // c4627921da
+	//TODO: VPMOVSXBD X11, X11              // c4427921db
+	//TODO: VPMOVSXBD (BX), Y2              // c4e27d2113
+	//TODO: VPMOVSXBD (R11), Y2             // c4c27d2113
+	//TODO: VPMOVSXBD X2, Y2                // c4e27d21d2
+	//TODO: VPMOVSXBD X11, Y2               // c4c27d21d3
+	//TODO: VPMOVSXBD (BX), Y11             // c4627d211b
+	//TODO: VPMOVSXBD (R11), Y11            // c4427d211b
+	//TODO: VPMOVSXBD X2, Y11               // c4627d21da
+	//TODO: VPMOVSXBD X11, Y11              // c4427d21db
+	//TODO: VPMOVSXBQ (BX), X2              // c4e2792213
+	//TODO: VPMOVSXBQ (R11), X2             // c4c2792213
+	//TODO: VPMOVSXBQ X2, X2                // c4e27922d2
+	//TODO: VPMOVSXBQ X11, X2               // c4c27922d3
+	//TODO: VPMOVSXBQ (BX), X11             // c46279221b
+	//TODO: VPMOVSXBQ (R11), X11            // c44279221b
+	//TODO: VPMOVSXBQ X2, X11               // c4627922da
+	//TODO: VPMOVSXBQ X11, X11              // c4427922db
+	//TODO: VPMOVSXBQ (BX), Y2              // c4e27d2213
+	//TODO: VPMOVSXBQ (R11), Y2             // c4c27d2213
+	//TODO: VPMOVSXBQ X2, Y2                // c4e27d22d2
+	//TODO: VPMOVSXBQ X11, Y2               // c4c27d22d3
+	//TODO: VPMOVSXBQ (BX), Y11             // c4627d221b
+	//TODO: VPMOVSXBQ (R11), Y11            // c4427d221b
+	//TODO: VPMOVSXBQ X2, Y11               // c4627d22da
+	//TODO: VPMOVSXBQ X11, Y11              // c4427d22db
+	//TODO: VPMOVSXBW (BX), X2              // c4e2792013
+	//TODO: VPMOVSXBW (R11), X2             // c4c2792013
+	//TODO: VPMOVSXBW X2, X2                // c4e27920d2
+	//TODO: VPMOVSXBW X11, X2               // c4c27920d3
+	//TODO: VPMOVSXBW (BX), X11             // c46279201b
+	//TODO: VPMOVSXBW (R11), X11            // c44279201b
+	//TODO: VPMOVSXBW X2, X11               // c4627920da
+	//TODO: VPMOVSXBW X11, X11              // c4427920db
+	//TODO: VPMOVSXBW (BX), Y2              // c4e27d2013
+	//TODO: VPMOVSXBW (R11), Y2             // c4c27d2013
+	//TODO: VPMOVSXBW X2, Y2                // c4e27d20d2
+	//TODO: VPMOVSXBW X11, Y2               // c4c27d20d3
+	//TODO: VPMOVSXBW (BX), Y11             // c4627d201b
+	//TODO: VPMOVSXBW (R11), Y11            // c4427d201b
+	//TODO: VPMOVSXBW X2, Y11               // c4627d20da
+	//TODO: VPMOVSXBW X11, Y11              // c4427d20db
+	//TODO: VPMOVSXDQ (BX), X2              // c4e2792513
+	//TODO: VPMOVSXDQ (R11), X2             // c4c2792513
+	//TODO: VPMOVSXDQ X2, X2                // c4e27925d2
+	//TODO: VPMOVSXDQ X11, X2               // c4c27925d3
+	//TODO: VPMOVSXDQ (BX), X11             // c46279251b
+	//TODO: VPMOVSXDQ (R11), X11            // c44279251b
+	//TODO: VPMOVSXDQ X2, X11               // c4627925da
+	//TODO: VPMOVSXDQ X11, X11              // c4427925db
+	//TODO: VPMOVSXDQ (BX), Y2              // c4e27d2513
+	//TODO: VPMOVSXDQ (R11), Y2             // c4c27d2513
+	//TODO: VPMOVSXDQ X2, Y2                // c4e27d25d2
+	//TODO: VPMOVSXDQ X11, Y2               // c4c27d25d3
+	//TODO: VPMOVSXDQ (BX), Y11             // c4627d251b
+	//TODO: VPMOVSXDQ (R11), Y11            // c4427d251b
+	//TODO: VPMOVSXDQ X2, Y11               // c4627d25da
+	//TODO: VPMOVSXDQ X11, Y11              // c4427d25db
+	//TODO: VPMOVSXWD (BX), X2              // c4e2792313
+	//TODO: VPMOVSXWD (R11), X2             // c4c2792313
+	//TODO: VPMOVSXWD X2, X2                // c4e27923d2
+	//TODO: VPMOVSXWD X11, X2               // c4c27923d3
+	//TODO: VPMOVSXWD (BX), X11             // c46279231b
+	//TODO: VPMOVSXWD (R11), X11            // c44279231b
+	//TODO: VPMOVSXWD X2, X11               // c4627923da
+	//TODO: VPMOVSXWD X11, X11              // c4427923db
+	//TODO: VPMOVSXWD (BX), Y2              // c4e27d2313
+	//TODO: VPMOVSXWD (R11), Y2             // c4c27d2313
+	//TODO: VPMOVSXWD X2, Y2                // c4e27d23d2
+	//TODO: VPMOVSXWD X11, Y2               // c4c27d23d3
+	//TODO: VPMOVSXWD (BX), Y11             // c4627d231b
+	//TODO: VPMOVSXWD (R11), Y11            // c4427d231b
+	//TODO: VPMOVSXWD X2, Y11               // c4627d23da
+	//TODO: VPMOVSXWD X11, Y11              // c4427d23db
+	//TODO: VPMOVSXWQ (BX), X2              // c4e2792413
+	//TODO: VPMOVSXWQ (R11), X2             // c4c2792413
+	//TODO: VPMOVSXWQ X2, X2                // c4e27924d2
+	//TODO: VPMOVSXWQ X11, X2               // c4c27924d3
+	//TODO: VPMOVSXWQ (BX), X11             // c46279241b
+	//TODO: VPMOVSXWQ (R11), X11            // c44279241b
+	//TODO: VPMOVSXWQ X2, X11               // c4627924da
+	//TODO: VPMOVSXWQ X11, X11              // c4427924db
+	//TODO: VPMOVSXWQ (BX), Y2              // c4e27d2413
+	//TODO: VPMOVSXWQ (R11), Y2             // c4c27d2413
+	//TODO: VPMOVSXWQ X2, Y2                // c4e27d24d2
+	//TODO: VPMOVSXWQ X11, Y2               // c4c27d24d3
+	//TODO: VPMOVSXWQ (BX), Y11             // c4627d241b
+	//TODO: VPMOVSXWQ (R11), Y11            // c4427d241b
+	//TODO: VPMOVSXWQ X2, Y11               // c4627d24da
+	//TODO: VPMOVSXWQ X11, Y11              // c4427d24db
+	//TODO: VPMOVZXBD (BX), X2              // c4e2793113
+	//TODO: VPMOVZXBD (R11), X2             // c4c2793113
+	//TODO: VPMOVZXBD X2, X2                // c4e27931d2
+	//TODO: VPMOVZXBD X11, X2               // c4c27931d3
+	//TODO: VPMOVZXBD (BX), X11             // c46279311b
+	//TODO: VPMOVZXBD (R11), X11            // c44279311b
+	//TODO: VPMOVZXBD X2, X11               // c4627931da
+	//TODO: VPMOVZXBD X11, X11              // c4427931db
+	//TODO: VPMOVZXBD (BX), Y2              // c4e27d3113
+	//TODO: VPMOVZXBD (R11), Y2             // c4c27d3113
+	//TODO: VPMOVZXBD X2, Y2                // c4e27d31d2
+	//TODO: VPMOVZXBD X11, Y2               // c4c27d31d3
+	//TODO: VPMOVZXBD (BX), Y11             // c4627d311b
+	//TODO: VPMOVZXBD (R11), Y11            // c4427d311b
+	//TODO: VPMOVZXBD X2, Y11               // c4627d31da
+	//TODO: VPMOVZXBD X11, Y11              // c4427d31db
+	//TODO: VPMOVZXBQ (BX), X2              // c4e2793213
+	//TODO: VPMOVZXBQ (R11), X2             // c4c2793213
+	//TODO: VPMOVZXBQ X2, X2                // c4e27932d2
+	//TODO: VPMOVZXBQ X11, X2               // c4c27932d3
+	//TODO: VPMOVZXBQ (BX), X11             // c46279321b
+	//TODO: VPMOVZXBQ (R11), X11            // c44279321b
+	//TODO: VPMOVZXBQ X2, X11               // c4627932da
+	//TODO: VPMOVZXBQ X11, X11              // c4427932db
+	//TODO: VPMOVZXBQ (BX), Y2              // c4e27d3213
+	//TODO: VPMOVZXBQ (R11), Y2             // c4c27d3213
+	//TODO: VPMOVZXBQ X2, Y2                // c4e27d32d2
+	//TODO: VPMOVZXBQ X11, Y2               // c4c27d32d3
+	//TODO: VPMOVZXBQ (BX), Y11             // c4627d321b
+	//TODO: VPMOVZXBQ (R11), Y11            // c4427d321b
+	//TODO: VPMOVZXBQ X2, Y11               // c4627d32da
+	//TODO: VPMOVZXBQ X11, Y11              // c4427d32db
+	//TODO: VPMOVZXBW (BX), X2              // c4e2793013
+	//TODO: VPMOVZXBW (R11), X2             // c4c2793013
+	//TODO: VPMOVZXBW X2, X2                // c4e27930d2
+	//TODO: VPMOVZXBW X11, X2               // c4c27930d3
+	//TODO: VPMOVZXBW (BX), X11             // c46279301b
+	//TODO: VPMOVZXBW (R11), X11            // c44279301b
+	//TODO: VPMOVZXBW X2, X11               // c4627930da
+	//TODO: VPMOVZXBW X11, X11              // c4427930db
+	//TODO: VPMOVZXBW (BX), Y2              // c4e27d3013
+	//TODO: VPMOVZXBW (R11), Y2             // c4c27d3013
+	//TODO: VPMOVZXBW X2, Y2                // c4e27d30d2
+	//TODO: VPMOVZXBW X11, Y2               // c4c27d30d3
+	//TODO: VPMOVZXBW (BX), Y11             // c4627d301b
+	//TODO: VPMOVZXBW (R11), Y11            // c4427d301b
+	//TODO: VPMOVZXBW X2, Y11               // c4627d30da
+	//TODO: VPMOVZXBW X11, Y11              // c4427d30db
+	//TODO: VPMOVZXDQ (BX), X2              // c4e2793513
+	//TODO: VPMOVZXDQ (R11), X2             // c4c2793513
+	//TODO: VPMOVZXDQ X2, X2                // c4e27935d2
+	//TODO: VPMOVZXDQ X11, X2               // c4c27935d3
+	//TODO: VPMOVZXDQ (BX), X11             // c46279351b
+	//TODO: VPMOVZXDQ (R11), X11            // c44279351b
+	//TODO: VPMOVZXDQ X2, X11               // c4627935da
+	//TODO: VPMOVZXDQ X11, X11              // c4427935db
+	//TODO: VPMOVZXDQ (BX), Y2              // c4e27d3513
+	//TODO: VPMOVZXDQ (R11), Y2             // c4c27d3513
+	//TODO: VPMOVZXDQ X2, Y2                // c4e27d35d2
+	//TODO: VPMOVZXDQ X11, Y2               // c4c27d35d3
+	//TODO: VPMOVZXDQ (BX), Y11             // c4627d351b
+	//TODO: VPMOVZXDQ (R11), Y11            // c4427d351b
+	//TODO: VPMOVZXDQ X2, Y11               // c4627d35da
+	//TODO: VPMOVZXDQ X11, Y11              // c4427d35db
+	//TODO: VPMOVZXWD (BX), X2              // c4e2793313
+	//TODO: VPMOVZXWD (R11), X2             // c4c2793313
+	//TODO: VPMOVZXWD X2, X2                // c4e27933d2
+	//TODO: VPMOVZXWD X11, X2               // c4c27933d3
+	//TODO: VPMOVZXWD (BX), X11             // c46279331b
+	//TODO: VPMOVZXWD (R11), X11            // c44279331b
+	//TODO: VPMOVZXWD X2, X11               // c4627933da
+	//TODO: VPMOVZXWD X11, X11              // c4427933db
+	//TODO: VPMOVZXWD (BX), Y2              // c4e27d3313
+	//TODO: VPMOVZXWD (R11), Y2             // c4c27d3313
+	//TODO: VPMOVZXWD X2, Y2                // c4e27d33d2
+	//TODO: VPMOVZXWD X11, Y2               // c4c27d33d3
+	//TODO: VPMOVZXWD (BX), Y11             // c4627d331b
+	//TODO: VPMOVZXWD (R11), Y11            // c4427d331b
+	//TODO: VPMOVZXWD X2, Y11               // c4627d33da
+	//TODO: VPMOVZXWD X11, Y11              // c4427d33db
+	//TODO: VPMOVZXWQ (BX), X2              // c4e2793413
+	//TODO: VPMOVZXWQ (R11), X2             // c4c2793413
+	//TODO: VPMOVZXWQ X2, X2                // c4e27934d2
+	//TODO: VPMOVZXWQ X11, X2               // c4c27934d3
+	//TODO: VPMOVZXWQ (BX), X11             // c46279341b
+	//TODO: VPMOVZXWQ (R11), X11            // c44279341b
+	//TODO: VPMOVZXWQ X2, X11               // c4627934da
+	//TODO: VPMOVZXWQ X11, X11              // c4427934db
+	//TODO: VPMOVZXWQ (BX), Y2              // c4e27d3413
+	//TODO: VPMOVZXWQ (R11), Y2             // c4c27d3413
+	//TODO: VPMOVZXWQ X2, Y2                // c4e27d34d2
+	//TODO: VPMOVZXWQ X11, Y2               // c4c27d34d3
+	//TODO: VPMOVZXWQ (BX), Y11             // c4627d341b
+	//TODO: VPMOVZXWQ (R11), Y11            // c4427d341b
+	//TODO: VPMOVZXWQ X2, Y11               // c4627d34da
+	//TODO: VPMOVZXWQ X11, Y11              // c4427d34db
+	//TODO: VPMULDQ (BX), X9, X2            // c4e2312813
+	//TODO: VPMULDQ (R11), X9, X2           // c4c2312813
+	//TODO: VPMULDQ X2, X9, X2              // c4e23128d2
+	//TODO: VPMULDQ X11, X9, X2             // c4c23128d3
+	//TODO: VPMULDQ (BX), X9, X11           // c46231281b
+	//TODO: VPMULDQ (R11), X9, X11          // c44231281b
+	//TODO: VPMULDQ X2, X9, X11             // c4623128da
+	//TODO: VPMULDQ X11, X9, X11            // c4423128db
+	//TODO: VPMULDQ (BX), Y15, Y2           // c4e2052813
+	//TODO: VPMULDQ (R11), Y15, Y2          // c4c2052813
+	//TODO: VPMULDQ Y2, Y15, Y2             // c4e20528d2
+	//TODO: VPMULDQ Y11, Y15, Y2            // c4c20528d3
+	//TODO: VPMULDQ (BX), Y15, Y11          // c46205281b
+	//TODO: VPMULDQ (R11), Y15, Y11         // c44205281b
+	//TODO: VPMULDQ Y2, Y15, Y11            // c4620528da
+	//TODO: VPMULDQ Y11, Y15, Y11           // c4420528db
+	//TODO: VPMULHRSW (BX), X9, X2          // c4e2310b13
+	//TODO: VPMULHRSW (R11), X9, X2         // c4c2310b13
+	//TODO: VPMULHRSW X2, X9, X2            // c4e2310bd2
+	//TODO: VPMULHRSW X11, X9, X2           // c4c2310bd3
+	//TODO: VPMULHRSW (BX), X9, X11         // c462310b1b
+	//TODO: VPMULHRSW (R11), X9, X11        // c442310b1b
+	//TODO: VPMULHRSW X2, X9, X11           // c462310bda
+	//TODO: VPMULHRSW X11, X9, X11          // c442310bdb
+	//TODO: VPMULHRSW (BX), Y15, Y2         // c4e2050b13
+	//TODO: VPMULHRSW (R11), Y15, Y2        // c4c2050b13
+	//TODO: VPMULHRSW Y2, Y15, Y2           // c4e2050bd2
+	//TODO: VPMULHRSW Y11, Y15, Y2          // c4c2050bd3
+	//TODO: VPMULHRSW (BX), Y15, Y11        // c462050b1b
+	//TODO: VPMULHRSW (R11), Y15, Y11       // c442050b1b
+	//TODO: VPMULHRSW Y2, Y15, Y11          // c462050bda
+	//TODO: VPMULHRSW Y11, Y15, Y11         // c442050bdb
+	//TODO: VPMULHUW (BX), X9, X2           // c4e131e413 or c5b1e413
+	//TODO: VPMULHUW (R11), X9, X2          // c4c131e413
+	//TODO: VPMULHUW X2, X9, X2             // c4e131e4d2 or c5b1e4d2
+	//TODO: VPMULHUW X11, X9, X2            // c4c131e4d3
+	//TODO: VPMULHUW (BX), X9, X11          // c46131e41b or c531e41b
+	//TODO: VPMULHUW (R11), X9, X11         // c44131e41b
+	//TODO: VPMULHUW X2, X9, X11            // c46131e4da or c531e4da
+	//TODO: VPMULHUW X11, X9, X11           // c44131e4db
+	//TODO: VPMULHUW (BX), Y15, Y2          // c4e105e413 or c585e413
+	//TODO: VPMULHUW (R11), Y15, Y2         // c4c105e413
+	//TODO: VPMULHUW Y2, Y15, Y2            // c4e105e4d2 or c585e4d2
+	//TODO: VPMULHUW Y11, Y15, Y2           // c4c105e4d3
+	//TODO: VPMULHUW (BX), Y15, Y11         // c46105e41b or c505e41b
+	//TODO: VPMULHUW (R11), Y15, Y11        // c44105e41b
+	//TODO: VPMULHUW Y2, Y15, Y11           // c46105e4da or c505e4da
+	//TODO: VPMULHUW Y11, Y15, Y11          // c44105e4db
+	//TODO: VPMULHW (BX), X9, X2            // c4e131e513 or c5b1e513
+	//TODO: VPMULHW (R11), X9, X2           // c4c131e513
+	//TODO: VPMULHW X2, X9, X2              // c4e131e5d2 or c5b1e5d2
+	//TODO: VPMULHW X11, X9, X2             // c4c131e5d3
+	//TODO: VPMULHW (BX), X9, X11           // c46131e51b or c531e51b
+	//TODO: VPMULHW (R11), X9, X11          // c44131e51b
+	//TODO: VPMULHW X2, X9, X11             // c46131e5da or c531e5da
+	//TODO: VPMULHW X11, X9, X11            // c44131e5db
+	//TODO: VPMULHW (BX), Y15, Y2           // c4e105e513 or c585e513
+	//TODO: VPMULHW (R11), Y15, Y2          // c4c105e513
+	//TODO: VPMULHW Y2, Y15, Y2             // c4e105e5d2 or c585e5d2
+	//TODO: VPMULHW Y11, Y15, Y2            // c4c105e5d3
+	//TODO: VPMULHW (BX), Y15, Y11          // c46105e51b or c505e51b
+	//TODO: VPMULHW (R11), Y15, Y11         // c44105e51b
+	//TODO: VPMULHW Y2, Y15, Y11            // c46105e5da or c505e5da
+	//TODO: VPMULHW Y11, Y15, Y11           // c44105e5db
+	//TODO: VPMULLD (BX), X9, X2            // c4e2314013
+	//TODO: VPMULLD (R11), X9, X2           // c4c2314013
+	//TODO: VPMULLD X2, X9, X2              // c4e23140d2
+	//TODO: VPMULLD X11, X9, X2             // c4c23140d3
+	//TODO: VPMULLD (BX), X9, X11           // c46231401b
+	//TODO: VPMULLD (R11), X9, X11          // c44231401b
+	//TODO: VPMULLD X2, X9, X11             // c4623140da
+	//TODO: VPMULLD X11, X9, X11            // c4423140db
+	//TODO: VPMULLD (BX), Y15, Y2           // c4e2054013
+	//TODO: VPMULLD (R11), Y15, Y2          // c4c2054013
+	//TODO: VPMULLD Y2, Y15, Y2             // c4e20540d2
+	//TODO: VPMULLD Y11, Y15, Y2            // c4c20540d3
+	//TODO: VPMULLD (BX), Y15, Y11          // c46205401b
+	//TODO: VPMULLD (R11), Y15, Y11         // c44205401b
+	//TODO: VPMULLD Y2, Y15, Y11            // c4620540da
+	//TODO: VPMULLD Y11, Y15, Y11           // c4420540db
+	//TODO: VPMULLW (BX), X9, X2            // c4e131d513 or c5b1d513
+	//TODO: VPMULLW (R11), X9, X2           // c4c131d513
+	//TODO: VPMULLW X2, X9, X2              // c4e131d5d2 or c5b1d5d2
+	//TODO: VPMULLW X11, X9, X2             // c4c131d5d3
+	//TODO: VPMULLW (BX), X9, X11           // c46131d51b or c531d51b
+	//TODO: VPMULLW (R11), X9, X11          // c44131d51b
+	//TODO: VPMULLW X2, X9, X11             // c46131d5da or c531d5da
+	//TODO: VPMULLW X11, X9, X11            // c44131d5db
+	//TODO: VPMULLW (BX), Y15, Y2           // c4e105d513 or c585d513
+	//TODO: VPMULLW (R11), Y15, Y2          // c4c105d513
+	//TODO: VPMULLW Y2, Y15, Y2             // c4e105d5d2 or c585d5d2
+	//TODO: VPMULLW Y11, Y15, Y2            // c4c105d5d3
+	//TODO: VPMULLW (BX), Y15, Y11          // c46105d51b or c505d51b
+	//TODO: VPMULLW (R11), Y15, Y11         // c44105d51b
+	//TODO: VPMULLW Y2, Y15, Y11            // c46105d5da or c505d5da
+	//TODO: VPMULLW Y11, Y15, Y11           // c44105d5db
+	//TODO: VPMULUDQ (BX), X9, X2           // c4e131f413 or c5b1f413
+	//TODO: VPMULUDQ (R11), X9, X2          // c4c131f413
+	//TODO: VPMULUDQ X2, X9, X2             // c4e131f4d2 or c5b1f4d2
+	//TODO: VPMULUDQ X11, X9, X2            // c4c131f4d3
+	//TODO: VPMULUDQ (BX), X9, X11          // c46131f41b or c531f41b
+	//TODO: VPMULUDQ (R11), X9, X11         // c44131f41b
+	//TODO: VPMULUDQ X2, X9, X11            // c46131f4da or c531f4da
+	//TODO: VPMULUDQ X11, X9, X11           // c44131f4db
+	//TODO: VPMULUDQ (BX), Y15, Y2          // c4e105f413 or c585f413
+	//TODO: VPMULUDQ (R11), Y15, Y2         // c4c105f413
+	//TODO: VPMULUDQ Y2, Y15, Y2            // c4e105f4d2 or c585f4d2
+	//TODO: VPMULUDQ Y11, Y15, Y2           // c4c105f4d3
+	//TODO: VPMULUDQ (BX), Y15, Y11         // c46105f41b or c505f41b
+	//TODO: VPMULUDQ (R11), Y15, Y11        // c44105f41b
+	//TODO: VPMULUDQ Y2, Y15, Y11           // c46105f4da or c505f4da
+	//TODO: VPMULUDQ Y11, Y15, Y11          // c44105f4db
+	//TODO: VPOR (BX), X9, X2               // c4e131eb13 or c5b1eb13
+	//TODO: VPOR (R11), X9, X2              // c4c131eb13
+	//TODO: VPOR X2, X9, X2                 // c4e131ebd2 or c5b1ebd2
+	//TODO: VPOR X11, X9, X2                // c4c131ebd3
+	//TODO: VPOR (BX), X9, X11              // c46131eb1b or c531eb1b
+	//TODO: VPOR (R11), X9, X11             // c44131eb1b
+	//TODO: VPOR X2, X9, X11                // c46131ebda or c531ebda
+	//TODO: VPOR X11, X9, X11               // c44131ebdb
+	//TODO: VPOR (BX), Y15, Y2              // c4e105eb13 or c585eb13
+	//TODO: VPOR (R11), Y15, Y2             // c4c105eb13
+	//TODO: VPOR Y2, Y15, Y2                // c4e105ebd2 or c585ebd2
+	//TODO: VPOR Y11, Y15, Y2               // c4c105ebd3
+	//TODO: VPOR (BX), Y15, Y11             // c46105eb1b or c505eb1b
+	//TODO: VPOR (R11), Y15, Y11            // c44105eb1b
+	//TODO: VPOR Y2, Y15, Y11               // c46105ebda or c505ebda
+	//TODO: VPOR Y11, Y15, Y11              // c44105ebdb
+	//TODO: VPSADBW (BX), X9, X2            // c4e131f613 or c5b1f613
+	//TODO: VPSADBW (R11), X9, X2           // c4c131f613
+	//TODO: VPSADBW X2, X9, X2              // c4e131f6d2 or c5b1f6d2
+	//TODO: VPSADBW X11, X9, X2             // c4c131f6d3
+	//TODO: VPSADBW (BX), X9, X11           // c46131f61b or c531f61b
+	//TODO: VPSADBW (R11), X9, X11          // c44131f61b
+	//TODO: VPSADBW X2, X9, X11             // c46131f6da or c531f6da
+	//TODO: VPSADBW X11, X9, X11            // c44131f6db
+	//TODO: VPSADBW (BX), Y15, Y2           // c4e105f613 or c585f613
+	//TODO: VPSADBW (R11), Y15, Y2          // c4c105f613
+	//TODO: VPSADBW Y2, Y15, Y2             // c4e105f6d2 or c585f6d2
+	//TODO: VPSADBW Y11, Y15, Y2            // c4c105f6d3
+	//TODO: VPSADBW (BX), Y15, Y11          // c46105f61b or c505f61b
+	//TODO: VPSADBW (R11), Y15, Y11         // c44105f61b
+	//TODO: VPSADBW Y2, Y15, Y11            // c46105f6da or c505f6da
+	//TODO: VPSADBW Y11, Y15, Y11           // c44105f6db
+	//TODO: VPSHUFB (BX), X9, X2            // c4e2310013
+	//TODO: VPSHUFB (R11), X9, X2           // c4c2310013
+	//TODO: VPSHUFB X2, X9, X2              // c4e23100d2
+	//TODO: VPSHUFB X11, X9, X2             // c4c23100d3
+	//TODO: VPSHUFB (BX), X9, X11           // c46231001b
+	//TODO: VPSHUFB (R11), X9, X11          // c44231001b
+	//TODO: VPSHUFB X2, X9, X11             // c4623100da
+	//TODO: VPSHUFB X11, X9, X11            // c4423100db
+	//TODO: VPSHUFB (BX), Y15, Y2           // c4e2050013
+	//TODO: VPSHUFB (R11), Y15, Y2          // c4c2050013
+	//TODO: VPSHUFB Y2, Y15, Y2             // c4e20500d2
+	//TODO: VPSHUFB Y11, Y15, Y2            // c4c20500d3
+	//TODO: VPSHUFB (BX), Y15, Y11          // c46205001b
+	//TODO: VPSHUFB (R11), Y15, Y11         // c44205001b
+	//TODO: VPSHUFB Y2, Y15, Y11            // c4620500da
+	//TODO: VPSHUFB Y11, Y15, Y11           // c4420500db
+	//TODO: VPSHUFD $7, (BX), X2            // c4e179701307 or c5f9701307
+	//TODO: VPSHUFD $7, (R11), X2           // c4c179701307
+	//TODO: VPSHUFD $7, X2, X2              // c4e17970d207 or c5f970d207
+	//TODO: VPSHUFD $7, X11, X2             // c4c17970d307
+	//TODO: VPSHUFD $7, (BX), X11           // c46179701b07 or c579701b07
+	//TODO: VPSHUFD $7, (R11), X11          // c44179701b07
+	//TODO: VPSHUFD $7, X2, X11             // c4617970da07 or c57970da07
+	//TODO: VPSHUFD $7, X11, X11            // c4417970db07
+	//TODO: VPSHUFD $7, (BX), Y2            // c4e17d701307 or c5fd701307
+	//TODO: VPSHUFD $7, (R11), Y2           // c4c17d701307
+	//TODO: VPSHUFD $7, Y2, Y2              // c4e17d70d207 or c5fd70d207
+	//TODO: VPSHUFD $7, Y11, Y2             // c4c17d70d307
+	//TODO: VPSHUFD $7, (BX), Y11           // c4617d701b07 or c57d701b07
+	//TODO: VPSHUFD $7, (R11), Y11          // c4417d701b07
+	//TODO: VPSHUFD $7, Y2, Y11             // c4617d70da07 or c57d70da07
+	//TODO: VPSHUFD $7, Y11, Y11            // c4417d70db07
+	//TODO: VPSHUFHW $7, (BX), X2           // c4e17a701307 or c5fa701307
+	//TODO: VPSHUFHW $7, (R11), X2          // c4c17a701307
+	//TODO: VPSHUFHW $7, X2, X2             // c4e17a70d207 or c5fa70d207
+	//TODO: VPSHUFHW $7, X11, X2            // c4c17a70d307
+	//TODO: VPSHUFHW $7, (BX), X11          // c4617a701b07 or c57a701b07
+	//TODO: VPSHUFHW $7, (R11), X11         // c4417a701b07
+	//TODO: VPSHUFHW $7, X2, X11            // c4617a70da07 or c57a70da07
+	//TODO: VPSHUFHW $7, X11, X11           // c4417a70db07
+	//TODO: VPSHUFHW $7, (BX), Y2           // c4e17e701307 or c5fe701307
+	//TODO: VPSHUFHW $7, (R11), Y2          // c4c17e701307
+	//TODO: VPSHUFHW $7, Y2, Y2             // c4e17e70d207 or c5fe70d207
+	//TODO: VPSHUFHW $7, Y11, Y2            // c4c17e70d307
+	//TODO: VPSHUFHW $7, (BX), Y11          // c4617e701b07 or c57e701b07
+	//TODO: VPSHUFHW $7, (R11), Y11         // c4417e701b07
+	//TODO: VPSHUFHW $7, Y2, Y11            // c4617e70da07 or c57e70da07
+	//TODO: VPSHUFHW $7, Y11, Y11           // c4417e70db07
+	//TODO: VPSHUFLW $7, (BX), X2           // c4e17b701307 or c5fb701307
+	//TODO: VPSHUFLW $7, (R11), X2          // c4c17b701307
+	//TODO: VPSHUFLW $7, X2, X2             // c4e17b70d207 or c5fb70d207
+	//TODO: VPSHUFLW $7, X11, X2            // c4c17b70d307
+	//TODO: VPSHUFLW $7, (BX), X11          // c4617b701b07 or c57b701b07
+	//TODO: VPSHUFLW $7, (R11), X11         // c4417b701b07
+	//TODO: VPSHUFLW $7, X2, X11            // c4617b70da07 or c57b70da07
+	//TODO: VPSHUFLW $7, X11, X11           // c4417b70db07
+	//TODO: VPSHUFLW $7, (BX), Y2           // c4e17f701307 or c5ff701307
+	//TODO: VPSHUFLW $7, (R11), Y2          // c4c17f701307
+	//TODO: VPSHUFLW $7, Y2, Y2             // c4e17f70d207 or c5ff70d207
+	//TODO: VPSHUFLW $7, Y11, Y2            // c4c17f70d307
+	//TODO: VPSHUFLW $7, (BX), Y11          // c4617f701b07 or c57f701b07
+	//TODO: VPSHUFLW $7, (R11), Y11         // c4417f701b07
+	//TODO: VPSHUFLW $7, Y2, Y11            // c4617f70da07 or c57f70da07
+	//TODO: VPSHUFLW $7, Y11, Y11           // c4417f70db07
+	//TODO: VPSIGNB (BX), X9, X2            // c4e2310813
+	//TODO: VPSIGNB (R11), X9, X2           // c4c2310813
+	//TODO: VPSIGNB X2, X9, X2              // c4e23108d2
+	//TODO: VPSIGNB X11, X9, X2             // c4c23108d3
+	//TODO: VPSIGNB (BX), X9, X11           // c46231081b
+	//TODO: VPSIGNB (R11), X9, X11          // c44231081b
+	//TODO: VPSIGNB X2, X9, X11             // c4623108da
+	//TODO: VPSIGNB X11, X9, X11            // c4423108db
+	//TODO: VPSIGNB (BX), Y15, Y2           // c4e2050813
+	//TODO: VPSIGNB (R11), Y15, Y2          // c4c2050813
+	//TODO: VPSIGNB Y2, Y15, Y2             // c4e20508d2
+	//TODO: VPSIGNB Y11, Y15, Y2            // c4c20508d3
+	//TODO: VPSIGNB (BX), Y15, Y11          // c46205081b
+	//TODO: VPSIGNB (R11), Y15, Y11         // c44205081b
+	//TODO: VPSIGNB Y2, Y15, Y11            // c4620508da
+	//TODO: VPSIGNB Y11, Y15, Y11           // c4420508db
+	//TODO: VPSIGND (BX), X9, X2            // c4e2310a13
+	//TODO: VPSIGND (R11), X9, X2           // c4c2310a13
+	//TODO: VPSIGND X2, X9, X2              // c4e2310ad2
+	//TODO: VPSIGND X11, X9, X2             // c4c2310ad3
+	//TODO: VPSIGND (BX), X9, X11           // c462310a1b
+	//TODO: VPSIGND (R11), X9, X11          // c442310a1b
+	//TODO: VPSIGND X2, X9, X11             // c462310ada
+	//TODO: VPSIGND X11, X9, X11            // c442310adb
+	//TODO: VPSIGND (BX), Y15, Y2           // c4e2050a13
+	//TODO: VPSIGND (R11), Y15, Y2          // c4c2050a13
+	//TODO: VPSIGND Y2, Y15, Y2             // c4e2050ad2
+	//TODO: VPSIGND Y11, Y15, Y2            // c4c2050ad3
+	//TODO: VPSIGND (BX), Y15, Y11          // c462050a1b
+	//TODO: VPSIGND (R11), Y15, Y11         // c442050a1b
+	//TODO: VPSIGND Y2, Y15, Y11            // c462050ada
+	//TODO: VPSIGND Y11, Y15, Y11           // c442050adb
+	//TODO: VPSIGNW (BX), X9, X2            // c4e2310913
+	//TODO: VPSIGNW (R11), X9, X2           // c4c2310913
+	//TODO: VPSIGNW X2, X9, X2              // c4e23109d2
+	//TODO: VPSIGNW X11, X9, X2             // c4c23109d3
+	//TODO: VPSIGNW (BX), X9, X11           // c46231091b
+	//TODO: VPSIGNW (R11), X9, X11          // c44231091b
+	//TODO: VPSIGNW X2, X9, X11             // c4623109da
+	//TODO: VPSIGNW X11, X9, X11            // c4423109db
+	//TODO: VPSIGNW (BX), Y15, Y2           // c4e2050913
+	//TODO: VPSIGNW (R11), Y15, Y2          // c4c2050913
+	//TODO: VPSIGNW Y2, Y15, Y2             // c4e20509d2
+	//TODO: VPSIGNW Y11, Y15, Y2            // c4c20509d3
+	//TODO: VPSIGNW (BX), Y15, Y11          // c46205091b
+	//TODO: VPSIGNW (R11), Y15, Y11         // c44205091b
+	//TODO: VPSIGNW Y2, Y15, Y11            // c4620509da
+	//TODO: VPSIGNW Y11, Y15, Y11           // c4420509db
+	//TODO: VPSLLD (BX), X9, X2             // c4e131f213 or c5b1f213
+	//TODO: VPSLLD (R11), X9, X2            // c4c131f213
+	//TODO: VPSLLD X2, X9, X2               // c4e131f2d2 or c5b1f2d2
+	//TODO: VPSLLD X11, X9, X2              // c4c131f2d3
+	//TODO: VPSLLD (BX), X9, X11            // c46131f21b or c531f21b
+	//TODO: VPSLLD (R11), X9, X11           // c44131f21b
+	//TODO: VPSLLD X2, X9, X11              // c46131f2da or c531f2da
+	//TODO: VPSLLD X11, X9, X11             // c44131f2db
+	//TODO: VPSLLD $7, X2, X9               // c4e13172f207 or c5b172f207
+	//TODO: VPSLLD $7, X11, X9              // c4c13172f307
+	//TODO: VPSLLDQ $7, X2, X9              // c4e13173fa07 or c5b173fa07
+	//TODO: VPSLLDQ $7, X11, X9             // c4c13173fb07
+	//TODO: VPSLLDQ $7, Y2, Y15             // c4e10573fa07 or c58573fa07
+	//TODO: VPSLLDQ $7, Y11, Y15            // c4c10573fb07
+	//TODO: VPSLLQ (BX), X9, X2             // c4e131f313 or c5b1f313
+	//TODO: VPSLLQ (R11), X9, X2            // c4c131f313
+	//TODO: VPSLLQ X2, X9, X2               // c4e131f3d2 or c5b1f3d2
+	//TODO: VPSLLQ X11, X9, X2              // c4c131f3d3
+	//TODO: VPSLLQ (BX), X9, X11            // c46131f31b or c531f31b
+	//TODO: VPSLLQ (R11), X9, X11           // c44131f31b
+	//TODO: VPSLLQ X2, X9, X11              // c46131f3da or c531f3da
+	//TODO: VPSLLQ X11, X9, X11             // c44131f3db
+	//TODO: VPSLLQ $7, X2, X9               // c4e13173f207 or c5b173f207
+	//TODO: VPSLLQ $7, X11, X9              // c4c13173f307
+	//TODO: VPSLLVD (BX), X9, X2            // c4e2314713
+	//TODO: VPSLLVD (R11), X9, X2           // c4c2314713
+	//TODO: VPSLLVD X2, X9, X2              // c4e23147d2
+	//TODO: VPSLLVD X11, X9, X2             // c4c23147d3
+	//TODO: VPSLLVD (BX), X9, X11           // c46231471b
+	//TODO: VPSLLVD (R11), X9, X11          // c44231471b
+	//TODO: VPSLLVD X2, X9, X11             // c4623147da
+	//TODO: VPSLLVD X11, X9, X11            // c4423147db
+	//TODO: VPSLLVD (BX), Y15, Y2           // c4e2054713
+	//TODO: VPSLLVD (R11), Y15, Y2          // c4c2054713
+	//TODO: VPSLLVD Y2, Y15, Y2             // c4e20547d2
+	//TODO: VPSLLVD Y11, Y15, Y2            // c4c20547d3
+	//TODO: VPSLLVD (BX), Y15, Y11          // c46205471b
+	//TODO: VPSLLVD (R11), Y15, Y11         // c44205471b
+	//TODO: VPSLLVD Y2, Y15, Y11            // c4620547da
+	//TODO: VPSLLVD Y11, Y15, Y11           // c4420547db
+	//TODO: VPSLLVQ (BX), X9, X2            // c4e2b14713
+	//TODO: VPSLLVQ (R11), X9, X2           // c4c2b14713
+	//TODO: VPSLLVQ X2, X9, X2              // c4e2b147d2
+	//TODO: VPSLLVQ X11, X9, X2             // c4c2b147d3
+	//TODO: VPSLLVQ (BX), X9, X11           // c462b1471b
+	//TODO: VPSLLVQ (R11), X9, X11          // c442b1471b
+	//TODO: VPSLLVQ X2, X9, X11             // c462b147da
+	//TODO: VPSLLVQ X11, X9, X11            // c442b147db
+	//TODO: VPSLLVQ (BX), Y15, Y2           // c4e2854713
+	//TODO: VPSLLVQ (R11), Y15, Y2          // c4c2854713
+	//TODO: VPSLLVQ Y2, Y15, Y2             // c4e28547d2
+	//TODO: VPSLLVQ Y11, Y15, Y2            // c4c28547d3
+	//TODO: VPSLLVQ (BX), Y15, Y11          // c46285471b
+	//TODO: VPSLLVQ (R11), Y15, Y11         // c44285471b
+	//TODO: VPSLLVQ Y2, Y15, Y11            // c4628547da
+	//TODO: VPSLLVQ Y11, Y15, Y11           // c4428547db
+	//TODO: VPSLLW (BX), X9, X2             // c4e131f113 or c5b1f113
+	//TODO: VPSLLW (R11), X9, X2            // c4c131f113
+	//TODO: VPSLLW X2, X9, X2               // c4e131f1d2 or c5b1f1d2
+	//TODO: VPSLLW X11, X9, X2              // c4c131f1d3
+	//TODO: VPSLLW (BX), X9, X11            // c46131f11b or c531f11b
+	//TODO: VPSLLW (R11), X9, X11           // c44131f11b
+	//TODO: VPSLLW X2, X9, X11              // c46131f1da or c531f1da
+	//TODO: VPSLLW X11, X9, X11             // c44131f1db
+	//TODO: VPSLLW $7, X2, X9               // c4e13171f207 or c5b171f207
+	//TODO: VPSLLW $7, X11, X9              // c4c13171f307
+	//TODO: VPSLLW (BX), Y15, Y2            // c4e105f113 or c585f113
+	//TODO: VPSLLW (R11), Y15, Y2           // c4c105f113
+	//TODO: VPSLLW X2, Y15, Y2              // c4e105f1d2 or c585f1d2
+	//TODO: VPSLLW X11, Y15, Y2             // c4c105f1d3
+	//TODO: VPSLLW (BX), Y15, Y11           // c46105f11b or c505f11b
+	//TODO: VPSLLW (R11), Y15, Y11          // c44105f11b
+	//TODO: VPSLLW X2, Y15, Y11             // c46105f1da or c505f1da
+	//TODO: VPSLLW X11, Y15, Y11            // c44105f1db
+	//TODO: VPSLLW $7, Y2, Y15              // c4e10571f207 or c58571f207
+	//TODO: VPSLLW $7, Y11, Y15             // c4c10571f307
+	//TODO: VPSRAD (BX), X9, X2             // c4e131e213 or c5b1e213
+	//TODO: VPSRAD (R11), X9, X2            // c4c131e213
+	//TODO: VPSRAD X2, X9, X2               // c4e131e2d2 or c5b1e2d2
+	//TODO: VPSRAD X11, X9, X2              // c4c131e2d3
+	//TODO: VPSRAD (BX), X9, X11            // c46131e21b or c531e21b
+	//TODO: VPSRAD (R11), X9, X11           // c44131e21b
+	//TODO: VPSRAD X2, X9, X11              // c46131e2da or c531e2da
+	//TODO: VPSRAD X11, X9, X11             // c44131e2db
+	//TODO: VPSRAD $7, X2, X9               // c4e13172e207 or c5b172e207
+	//TODO: VPSRAD $7, X11, X9              // c4c13172e307
+	//TODO: VPSRAD (BX), Y15, Y2            // c4e105e213 or c585e213
+	//TODO: VPSRAD (R11), Y15, Y2           // c4c105e213
+	//TODO: VPSRAD X2, Y15, Y2              // c4e105e2d2 or c585e2d2
+	//TODO: VPSRAD X11, Y15, Y2             // c4c105e2d3
+	//TODO: VPSRAD (BX), Y15, Y11           // c46105e21b or c505e21b
+	//TODO: VPSRAD (R11), Y15, Y11          // c44105e21b
+	//TODO: VPSRAD X2, Y15, Y11             // c46105e2da or c505e2da
+	//TODO: VPSRAD X11, Y15, Y11            // c44105e2db
+	//TODO: VPSRAD $7, Y2, Y15              // c4e10572e207 or c58572e207
+	//TODO: VPSRAD $7, Y11, Y15             // c4c10572e307
+	//TODO: VPSRAVD (BX), X9, X2            // c4e2314613
+	//TODO: VPSRAVD (R11), X9, X2           // c4c2314613
+	//TODO: VPSRAVD X2, X9, X2              // c4e23146d2
+	//TODO: VPSRAVD X11, X9, X2             // c4c23146d3
+	//TODO: VPSRAVD (BX), X9, X11           // c46231461b
+	//TODO: VPSRAVD (R11), X9, X11          // c44231461b
+	//TODO: VPSRAVD X2, X9, X11             // c4623146da
+	//TODO: VPSRAVD X11, X9, X11            // c4423146db
+	//TODO: VPSRAVD (BX), Y15, Y2           // c4e2054613
+	//TODO: VPSRAVD (R11), Y15, Y2          // c4c2054613
+	//TODO: VPSRAVD Y2, Y15, Y2             // c4e20546d2
+	//TODO: VPSRAVD Y11, Y15, Y2            // c4c20546d3
+	//TODO: VPSRAVD (BX), Y15, Y11          // c46205461b
+	//TODO: VPSRAVD (R11), Y15, Y11         // c44205461b
+	//TODO: VPSRAVD Y2, Y15, Y11            // c4620546da
+	//TODO: VPSRAVD Y11, Y15, Y11           // c4420546db
+	//TODO: VPSRAW (BX), X9, X2             // c4e131e113 or c5b1e113
+	//TODO: VPSRAW (R11), X9, X2            // c4c131e113
+	//TODO: VPSRAW X2, X9, X2               // c4e131e1d2 or c5b1e1d2
+	//TODO: VPSRAW X11, X9, X2              // c4c131e1d3
+	//TODO: VPSRAW (BX), X9, X11            // c46131e11b or c531e11b
+	//TODO: VPSRAW (R11), X9, X11           // c44131e11b
+	//TODO: VPSRAW X2, X9, X11              // c46131e1da or c531e1da
+	//TODO: VPSRAW X11, X9, X11             // c44131e1db
+	//TODO: VPSRAW $7, X2, X9               // c4e13171e207 or c5b171e207
+	//TODO: VPSRAW $7, X11, X9              // c4c13171e307
+	//TODO: VPSRAW (BX), Y15, Y2            // c4e105e113 or c585e113
+	//TODO: VPSRAW (R11), Y15, Y2           // c4c105e113
+	//TODO: VPSRAW X2, Y15, Y2              // c4e105e1d2 or c585e1d2
+	//TODO: VPSRAW X11, Y15, Y2             // c4c105e1d3
+	//TODO: VPSRAW (BX), Y15, Y11           // c46105e11b or c505e11b
+	//TODO: VPSRAW (R11), Y15, Y11          // c44105e11b
+	//TODO: VPSRAW X2, Y15, Y11             // c46105e1da or c505e1da
+	//TODO: VPSRAW X11, Y15, Y11            // c44105e1db
+	//TODO: VPSRAW $7, Y2, Y15              // c4e10571e207 or c58571e207
+	//TODO: VPSRAW $7, Y11, Y15             // c4c10571e307
+	//TODO: VPSRLD (BX), X9, X2             // c4e131d213 or c5b1d213
+	//TODO: VPSRLD (R11), X9, X2            // c4c131d213
+	//TODO: VPSRLD X2, X9, X2               // c4e131d2d2 or c5b1d2d2
+	//TODO: VPSRLD X11, X9, X2              // c4c131d2d3
+	//TODO: VPSRLD (BX), X9, X11            // c46131d21b or c531d21b
+	//TODO: VPSRLD (R11), X9, X11           // c44131d21b
+	//TODO: VPSRLD X2, X9, X11              // c46131d2da or c531d2da
+	//TODO: VPSRLD X11, X9, X11             // c44131d2db
+	//TODO: VPSRLD $7, X2, X9               // c4e13172d207 or c5b172d207
+	//TODO: VPSRLD $7, X11, X9              // c4c13172d307
+	//TODO: VPSRLDQ $7, X2, X9              // c4e13173da07 or c5b173da07
+	//TODO: VPSRLDQ $7, X11, X9             // c4c13173db07
+	//TODO: VPSRLDQ $7, Y2, Y15             // c4e10573da07 or c58573da07
+	//TODO: VPSRLDQ $7, Y11, Y15            // c4c10573db07
+	//TODO: VPSRLQ (BX), X9, X2             // c4e131d313 or c5b1d313
+	//TODO: VPSRLQ (R11), X9, X2            // c4c131d313
+	//TODO: VPSRLQ X2, X9, X2               // c4e131d3d2 or c5b1d3d2
+	//TODO: VPSRLQ X11, X9, X2              // c4c131d3d3
+	//TODO: VPSRLQ (BX), X9, X11            // c46131d31b or c531d31b
+	//TODO: VPSRLQ (R11), X9, X11           // c44131d31b
+	//TODO: VPSRLQ X2, X9, X11              // c46131d3da or c531d3da
+	//TODO: VPSRLQ X11, X9, X11             // c44131d3db
+	//TODO: VPSRLQ $7, X2, X9               // c4e13173d207 or c5b173d207
+	//TODO: VPSRLQ $7, X11, X9              // c4c13173d307
+	//TODO: VPSRLVD (BX), X9, X2            // c4e2314513
+	//TODO: VPSRLVD (R11), X9, X2           // c4c2314513
+	//TODO: VPSRLVD X2, X9, X2              // c4e23145d2
+	//TODO: VPSRLVD X11, X9, X2             // c4c23145d3
+	//TODO: VPSRLVD (BX), X9, X11           // c46231451b
+	//TODO: VPSRLVD (R11), X9, X11          // c44231451b
+	//TODO: VPSRLVD X2, X9, X11             // c4623145da
+	//TODO: VPSRLVD X11, X9, X11            // c4423145db
+	//TODO: VPSRLVD (BX), Y15, Y2           // c4e2054513
+	//TODO: VPSRLVD (R11), Y15, Y2          // c4c2054513
+	//TODO: VPSRLVD Y2, Y15, Y2             // c4e20545d2
+	//TODO: VPSRLVD Y11, Y15, Y2            // c4c20545d3
+	//TODO: VPSRLVD (BX), Y15, Y11          // c46205451b
+	//TODO: VPSRLVD (R11), Y15, Y11         // c44205451b
+	//TODO: VPSRLVD Y2, Y15, Y11            // c4620545da
+	//TODO: VPSRLVD Y11, Y15, Y11           // c4420545db
+	//TODO: VPSRLVQ (BX), X9, X2            // c4e2b14513
+	//TODO: VPSRLVQ (R11), X9, X2           // c4c2b14513
+	//TODO: VPSRLVQ X2, X9, X2              // c4e2b145d2
+	//TODO: VPSRLVQ X11, X9, X2             // c4c2b145d3
+	//TODO: VPSRLVQ (BX), X9, X11           // c462b1451b
+	//TODO: VPSRLVQ (R11), X9, X11          // c442b1451b
+	//TODO: VPSRLVQ X2, X9, X11             // c462b145da
+	//TODO: VPSRLVQ X11, X9, X11            // c442b145db
+	//TODO: VPSRLVQ (BX), Y15, Y2           // c4e2854513
+	//TODO: VPSRLVQ (R11), Y15, Y2          // c4c2854513
+	//TODO: VPSRLVQ Y2, Y15, Y2             // c4e28545d2
+	//TODO: VPSRLVQ Y11, Y15, Y2            // c4c28545d3
+	//TODO: VPSRLVQ (BX), Y15, Y11          // c46285451b
+	//TODO: VPSRLVQ (R11), Y15, Y11         // c44285451b
+	//TODO: VPSRLVQ Y2, Y15, Y11            // c4628545da
+	//TODO: VPSRLVQ Y11, Y15, Y11           // c4428545db
+	//TODO: VPSRLW (BX), X9, X2             // c4e131d113 or c5b1d113
+	//TODO: VPSRLW (R11), X9, X2            // c4c131d113
+	//TODO: VPSRLW X2, X9, X2               // c4e131d1d2 or c5b1d1d2
+	//TODO: VPSRLW X11, X9, X2              // c4c131d1d3
+	//TODO: VPSRLW (BX), X9, X11            // c46131d11b or c531d11b
+	//TODO: VPSRLW (R11), X9, X11           // c44131d11b
+	//TODO: VPSRLW X2, X9, X11              // c46131d1da or c531d1da
+	//TODO: VPSRLW X11, X9, X11             // c44131d1db
+	//TODO: VPSRLW $7, X2, X9               // c4e13171d207 or c5b171d207
+	//TODO: VPSRLW $7, X11, X9              // c4c13171d307
+	//TODO: VPSRLW (BX), Y15, Y2            // c4e105d113 or c585d113
+	//TODO: VPSRLW (R11), Y15, Y2           // c4c105d113
+	//TODO: VPSRLW X2, Y15, Y2              // c4e105d1d2 or c585d1d2
+	//TODO: VPSRLW X11, Y15, Y2             // c4c105d1d3
+	//TODO: VPSRLW (BX), Y15, Y11           // c46105d11b or c505d11b
+	//TODO: VPSRLW (R11), Y15, Y11          // c44105d11b
+	//TODO: VPSRLW X2, Y15, Y11             // c46105d1da or c505d1da
+	//TODO: VPSRLW X11, Y15, Y11            // c44105d1db
+	//TODO: VPSRLW $7, Y2, Y15              // c4e10571d207 or c58571d207
+	//TODO: VPSRLW $7, Y11, Y15             // c4c10571d307
+	//TODO: VPSUBB (BX), X9, X2             // c4e131f813 or c5b1f813
+	//TODO: VPSUBB (R11), X9, X2            // c4c131f813
+	//TODO: VPSUBB X2, X9, X2               // c4e131f8d2 or c5b1f8d2
+	//TODO: VPSUBB X11, X9, X2              // c4c131f8d3
+	//TODO: VPSUBB (BX), X9, X11            // c46131f81b or c531f81b
+	//TODO: VPSUBB (R11), X9, X11           // c44131f81b
+	//TODO: VPSUBB X2, X9, X11              // c46131f8da or c531f8da
+	//TODO: VPSUBB X11, X9, X11             // c44131f8db
+	//TODO: VPSUBB (BX), Y15, Y2            // c4e105f813 or c585f813
+	//TODO: VPSUBB (R11), Y15, Y2           // c4c105f813
+	//TODO: VPSUBB Y2, Y15, Y2              // c4e105f8d2 or c585f8d2
+	//TODO: VPSUBB Y11, Y15, Y2             // c4c105f8d3
+	//TODO: VPSUBB (BX), Y15, Y11           // c46105f81b or c505f81b
+	//TODO: VPSUBB (R11), Y15, Y11          // c44105f81b
+	//TODO: VPSUBB Y2, Y15, Y11             // c46105f8da or c505f8da
+	//TODO: VPSUBB Y11, Y15, Y11            // c44105f8db
+	//TODO: VPSUBD (BX), X9, X2             // c4e131fa13 or c5b1fa13
+	//TODO: VPSUBD (R11), X9, X2            // c4c131fa13
+	//TODO: VPSUBD X2, X9, X2               // c4e131fad2 or c5b1fad2
+	//TODO: VPSUBD X11, X9, X2              // c4c131fad3
+	//TODO: VPSUBD (BX), X9, X11            // c46131fa1b or c531fa1b
+	//TODO: VPSUBD (R11), X9, X11           // c44131fa1b
+	//TODO: VPSUBD X2, X9, X11              // c46131fada or c531fada
+	//TODO: VPSUBD X11, X9, X11             // c44131fadb
+	//TODO: VPSUBD (BX), Y15, Y2            // c4e105fa13 or c585fa13
+	//TODO: VPSUBD (R11), Y15, Y2           // c4c105fa13
+	//TODO: VPSUBD Y2, Y15, Y2              // c4e105fad2 or c585fad2
+	//TODO: VPSUBD Y11, Y15, Y2             // c4c105fad3
+	//TODO: VPSUBD (BX), Y15, Y11           // c46105fa1b or c505fa1b
+	//TODO: VPSUBD (R11), Y15, Y11          // c44105fa1b
+	//TODO: VPSUBD Y2, Y15, Y11             // c46105fada or c505fada
+	//TODO: VPSUBD Y11, Y15, Y11            // c44105fadb
+	//TODO: VPSUBQ (BX), X9, X2             // c4e131fb13 or c5b1fb13
+	//TODO: VPSUBQ (R11), X9, X2            // c4c131fb13
+	//TODO: VPSUBQ X2, X9, X2               // c4e131fbd2 or c5b1fbd2
+	//TODO: VPSUBQ X11, X9, X2              // c4c131fbd3
+	//TODO: VPSUBQ (BX), X9, X11            // c46131fb1b or c531fb1b
+	//TODO: VPSUBQ (R11), X9, X11           // c44131fb1b
+	//TODO: VPSUBQ X2, X9, X11              // c46131fbda or c531fbda
+	//TODO: VPSUBQ X11, X9, X11             // c44131fbdb
+	//TODO: VPSUBQ (BX), Y15, Y2            // c4e105fb13 or c585fb13
+	//TODO: VPSUBQ (R11), Y15, Y2           // c4c105fb13
+	//TODO: VPSUBQ Y2, Y15, Y2              // c4e105fbd2 or c585fbd2
+	//TODO: VPSUBQ Y11, Y15, Y2             // c4c105fbd3
+	//TODO: VPSUBQ (BX), Y15, Y11           // c46105fb1b or c505fb1b
+	//TODO: VPSUBQ (R11), Y15, Y11          // c44105fb1b
+	//TODO: VPSUBQ Y2, Y15, Y11             // c46105fbda or c505fbda
+	//TODO: VPSUBQ Y11, Y15, Y11            // c44105fbdb
+	//TODO: VPSUBSB (BX), X9, X2            // c4e131e813 or c5b1e813
+	//TODO: VPSUBSB (R11), X9, X2           // c4c131e813
+	//TODO: VPSUBSB X2, X9, X2              // c4e131e8d2 or c5b1e8d2
+	//TODO: VPSUBSB X11, X9, X2             // c4c131e8d3
+	//TODO: VPSUBSB (BX), X9, X11           // c46131e81b or c531e81b
+	//TODO: VPSUBSB (R11), X9, X11          // c44131e81b
+	//TODO: VPSUBSB X2, X9, X11             // c46131e8da or c531e8da
+	//TODO: VPSUBSB X11, X9, X11            // c44131e8db
+	//TODO: VPSUBSB (BX), Y15, Y2           // c4e105e813 or c585e813
+	//TODO: VPSUBSB (R11), Y15, Y2          // c4c105e813
+	//TODO: VPSUBSB Y2, Y15, Y2             // c4e105e8d2 or c585e8d2
+	//TODO: VPSUBSB Y11, Y15, Y2            // c4c105e8d3
+	//TODO: VPSUBSB (BX), Y15, Y11          // c46105e81b or c505e81b
+	//TODO: VPSUBSB (R11), Y15, Y11         // c44105e81b
+	//TODO: VPSUBSB Y2, Y15, Y11            // c46105e8da or c505e8da
+	//TODO: VPSUBSB Y11, Y15, Y11           // c44105e8db
+	//TODO: VPSUBSW (BX), X9, X2            // c4e131e913 or c5b1e913
+	//TODO: VPSUBSW (R11), X9, X2           // c4c131e913
+	//TODO: VPSUBSW X2, X9, X2              // c4e131e9d2 or c5b1e9d2
+	//TODO: VPSUBSW X11, X9, X2             // c4c131e9d3
+	//TODO: VPSUBSW (BX), X9, X11           // c46131e91b or c531e91b
+	//TODO: VPSUBSW (R11), X9, X11          // c44131e91b
+	//TODO: VPSUBSW X2, X9, X11             // c46131e9da or c531e9da
+	//TODO: VPSUBSW X11, X9, X11            // c44131e9db
+	//TODO: VPSUBSW (BX), Y15, Y2           // c4e105e913 or c585e913
+	//TODO: VPSUBSW (R11), Y15, Y2          // c4c105e913
+	//TODO: VPSUBSW Y2, Y15, Y2             // c4e105e9d2 or c585e9d2
+	//TODO: VPSUBSW Y11, Y15, Y2            // c4c105e9d3
+	//TODO: VPSUBSW (BX), Y15, Y11          // c46105e91b or c505e91b
+	//TODO: VPSUBSW (R11), Y15, Y11         // c44105e91b
+	//TODO: VPSUBSW Y2, Y15, Y11            // c46105e9da or c505e9da
+	//TODO: VPSUBSW Y11, Y15, Y11           // c44105e9db
+	//TODO: VPSUBUSB (BX), X9, X2           // c4e131d813 or c5b1d813
+	//TODO: VPSUBUSB (R11), X9, X2          // c4c131d813
+	//TODO: VPSUBUSB X2, X9, X2             // c4e131d8d2 or c5b1d8d2
+	//TODO: VPSUBUSB X11, X9, X2            // c4c131d8d3
+	//TODO: VPSUBUSB (BX), X9, X11          // c46131d81b or c531d81b
+	//TODO: VPSUBUSB (R11), X9, X11         // c44131d81b
+	//TODO: VPSUBUSB X2, X9, X11            // c46131d8da or c531d8da
+	//TODO: VPSUBUSB X11, X9, X11           // c44131d8db
+	//TODO: VPSUBUSB (BX), Y15, Y2          // c4e105d813 or c585d813
+	//TODO: VPSUBUSB (R11), Y15, Y2         // c4c105d813
+	//TODO: VPSUBUSB Y2, Y15, Y2            // c4e105d8d2 or c585d8d2
+	//TODO: VPSUBUSB Y11, Y15, Y2           // c4c105d8d3
+	//TODO: VPSUBUSB (BX), Y15, Y11         // c46105d81b or c505d81b
+	//TODO: VPSUBUSB (R11), Y15, Y11        // c44105d81b
+	//TODO: VPSUBUSB Y2, Y15, Y11           // c46105d8da or c505d8da
+	//TODO: VPSUBUSB Y11, Y15, Y11          // c44105d8db
+	//TODO: VPSUBUSW (BX), X9, X2           // c4e131d913 or c5b1d913
+	//TODO: VPSUBUSW (R11), X9, X2          // c4c131d913
+	//TODO: VPSUBUSW X2, X9, X2             // c4e131d9d2 or c5b1d9d2
+	//TODO: VPSUBUSW X11, X9, X2            // c4c131d9d3
+	//TODO: VPSUBUSW (BX), X9, X11          // c46131d91b or c531d91b
+	//TODO: VPSUBUSW (R11), X9, X11         // c44131d91b
+	//TODO: VPSUBUSW X2, X9, X11            // c46131d9da or c531d9da
+	//TODO: VPSUBUSW X11, X9, X11           // c44131d9db
+	//TODO: VPSUBUSW (BX), Y15, Y2          // c4e105d913 or c585d913
+	//TODO: VPSUBUSW (R11), Y15, Y2         // c4c105d913
+	//TODO: VPSUBUSW Y2, Y15, Y2            // c4e105d9d2 or c585d9d2
+	//TODO: VPSUBUSW Y11, Y15, Y2           // c4c105d9d3
+	//TODO: VPSUBUSW (BX), Y15, Y11         // c46105d91b or c505d91b
+	//TODO: VPSUBUSW (R11), Y15, Y11        // c44105d91b
+	//TODO: VPSUBUSW Y2, Y15, Y11           // c46105d9da or c505d9da
+	//TODO: VPSUBUSW Y11, Y15, Y11          // c44105d9db
+	//TODO: VPSUBW (BX), X9, X2             // c4e131f913 or c5b1f913
+	//TODO: VPSUBW (R11), X9, X2            // c4c131f913
+	//TODO: VPSUBW X2, X9, X2               // c4e131f9d2 or c5b1f9d2
+	//TODO: VPSUBW X11, X9, X2              // c4c131f9d3
+	//TODO: VPSUBW (BX), X9, X11            // c46131f91b or c531f91b
+	//TODO: VPSUBW (R11), X9, X11           // c44131f91b
+	//TODO: VPSUBW X2, X9, X11              // c46131f9da or c531f9da
+	//TODO: VPSUBW X11, X9, X11             // c44131f9db
+	//TODO: VPSUBW (BX), Y15, Y2            // c4e105f913 or c585f913
+	//TODO: VPSUBW (R11), Y15, Y2           // c4c105f913
+	//TODO: VPSUBW Y2, Y15, Y2              // c4e105f9d2 or c585f9d2
+	//TODO: VPSUBW Y11, Y15, Y2             // c4c105f9d3
+	//TODO: VPSUBW (BX), Y15, Y11           // c46105f91b or c505f91b
+	//TODO: VPSUBW (R11), Y15, Y11          // c44105f91b
+	//TODO: VPSUBW Y2, Y15, Y11             // c46105f9da or c505f9da
+	//TODO: VPSUBW Y11, Y15, Y11            // c44105f9db
+	VPTEST (BX), X2                         // c4e2791713
+	VPTEST (R11), X2                        // c4c2791713
+	VPTEST X2, X2                           // c4e27917d2
+	VPTEST X11, X2                          // c4c27917d3
+	VPTEST (BX), X11                        // c46279171b
+	VPTEST (R11), X11                       // c44279171b
+	VPTEST X2, X11                          // c4627917da
+	VPTEST X11, X11                         // c4427917db
+	VPTEST (BX), Y2                         // c4e27d1713
+	VPTEST (R11), Y2                        // c4c27d1713
+	VPTEST Y2, Y2                           // c4e27d17d2
+	VPTEST Y11, Y2                          // c4c27d17d3
+	VPTEST (BX), Y11                        // c4627d171b
+	VPTEST (R11), Y11                       // c4427d171b
+	VPTEST Y2, Y11                          // c4627d17da
+	VPTEST Y11, Y11                         // c4427d17db
+	//TODO: VPUNPCKHBW (BX), X9, X2         // c4e1316813 or c5b16813
+	//TODO: VPUNPCKHBW (R11), X9, X2        // c4c1316813
+	//TODO: VPUNPCKHBW X2, X9, X2           // c4e13168d2 or c5b168d2
+	//TODO: VPUNPCKHBW X11, X9, X2          // c4c13168d3
+	//TODO: VPUNPCKHBW (BX), X9, X11        // c46131681b or c531681b
+	//TODO: VPUNPCKHBW (R11), X9, X11       // c44131681b
+	//TODO: VPUNPCKHBW X2, X9, X11          // c4613168da or c53168da
+	//TODO: VPUNPCKHBW X11, X9, X11         // c4413168db
+	//TODO: VPUNPCKHBW (BX), Y15, Y2        // c4e1056813 or c5856813
+	//TODO: VPUNPCKHBW (R11), Y15, Y2       // c4c1056813
+	//TODO: VPUNPCKHBW Y2, Y15, Y2          // c4e10568d2 or c58568d2
+	//TODO: VPUNPCKHBW Y11, Y15, Y2         // c4c10568d3
+	//TODO: VPUNPCKHBW (BX), Y15, Y11       // c46105681b or c505681b
+	//TODO: VPUNPCKHBW (R11), Y15, Y11      // c44105681b
+	//TODO: VPUNPCKHBW Y2, Y15, Y11         // c4610568da or c50568da
+	//TODO: VPUNPCKHBW Y11, Y15, Y11        // c4410568db
+	//TODO: VPUNPCKHDQ (BX), X9, X2         // c4e1316a13 or c5b16a13
+	//TODO: VPUNPCKHDQ (R11), X9, X2        // c4c1316a13
+	//TODO: VPUNPCKHDQ X2, X9, X2           // c4e1316ad2 or c5b16ad2
+	//TODO: VPUNPCKHDQ X11, X9, X2          // c4c1316ad3
+	//TODO: VPUNPCKHDQ (BX), X9, X11        // c461316a1b or c5316a1b
+	//TODO: VPUNPCKHDQ (R11), X9, X11       // c441316a1b
+	//TODO: VPUNPCKHDQ X2, X9, X11          // c461316ada or c5316ada
+	//TODO: VPUNPCKHDQ X11, X9, X11         // c441316adb
+	//TODO: VPUNPCKHDQ (BX), Y15, Y2        // c4e1056a13 or c5856a13
+	//TODO: VPUNPCKHDQ (R11), Y15, Y2       // c4c1056a13
+	//TODO: VPUNPCKHDQ Y2, Y15, Y2          // c4e1056ad2 or c5856ad2
+	//TODO: VPUNPCKHDQ Y11, Y15, Y2         // c4c1056ad3
+	//TODO: VPUNPCKHDQ (BX), Y15, Y11       // c461056a1b or c5056a1b
+	//TODO: VPUNPCKHDQ (R11), Y15, Y11      // c441056a1b
+	//TODO: VPUNPCKHDQ Y2, Y15, Y11         // c461056ada or c5056ada
+	//TODO: VPUNPCKHDQ Y11, Y15, Y11        // c441056adb
+	//TODO: VPUNPCKHQDQ (BX), X9, X2        // c4e1316d13 or c5b16d13
+	//TODO: VPUNPCKHQDQ (R11), X9, X2       // c4c1316d13
+	//TODO: VPUNPCKHQDQ X2, X9, X2          // c4e1316dd2 or c5b16dd2
+	//TODO: VPUNPCKHQDQ X11, X9, X2         // c4c1316dd3
+	//TODO: VPUNPCKHQDQ (BX), X9, X11       // c461316d1b or c5316d1b
+	//TODO: VPUNPCKHQDQ (R11), X9, X11      // c441316d1b
+	//TODO: VPUNPCKHQDQ X2, X9, X11         // c461316dda or c5316dda
+	//TODO: VPUNPCKHQDQ X11, X9, X11        // c441316ddb
+	//TODO: VPUNPCKHQDQ (BX), Y15, Y2       // c4e1056d13 or c5856d13
+	//TODO: VPUNPCKHQDQ (R11), Y15, Y2      // c4c1056d13
+	//TODO: VPUNPCKHQDQ Y2, Y15, Y2         // c4e1056dd2 or c5856dd2
+	//TODO: VPUNPCKHQDQ Y11, Y15, Y2        // c4c1056dd3
+	//TODO: VPUNPCKHQDQ (BX), Y15, Y11      // c461056d1b or c5056d1b
+	//TODO: VPUNPCKHQDQ (R11), Y15, Y11     // c441056d1b
+	//TODO: VPUNPCKHQDQ Y2, Y15, Y11        // c461056dda or c5056dda
+	//TODO: VPUNPCKHQDQ Y11, Y15, Y11       // c441056ddb
+	//TODO: VPUNPCKHWD (BX), X9, X2         // c4e1316913 or c5b16913
+	//TODO: VPUNPCKHWD (R11), X9, X2        // c4c1316913
+	//TODO: VPUNPCKHWD X2, X9, X2           // c4e13169d2 or c5b169d2
+	//TODO: VPUNPCKHWD X11, X9, X2          // c4c13169d3
+	//TODO: VPUNPCKHWD (BX), X9, X11        // c46131691b or c531691b
+	//TODO: VPUNPCKHWD (R11), X9, X11       // c44131691b
+	//TODO: VPUNPCKHWD X2, X9, X11          // c4613169da or c53169da
+	//TODO: VPUNPCKHWD X11, X9, X11         // c4413169db
+	//TODO: VPUNPCKHWD (BX), Y15, Y2        // c4e1056913 or c5856913
+	//TODO: VPUNPCKHWD (R11), Y15, Y2       // c4c1056913
+	//TODO: VPUNPCKHWD Y2, Y15, Y2          // c4e10569d2 or c58569d2
+	//TODO: VPUNPCKHWD Y11, Y15, Y2         // c4c10569d3
+	//TODO: VPUNPCKHWD (BX), Y15, Y11       // c46105691b or c505691b
+	//TODO: VPUNPCKHWD (R11), Y15, Y11      // c44105691b
+	//TODO: VPUNPCKHWD Y2, Y15, Y11         // c4610569da or c50569da
+	//TODO: VPUNPCKHWD Y11, Y15, Y11        // c4410569db
+	//TODO: VPUNPCKLBW (BX), X9, X2         // c4e1316013 or c5b16013
+	//TODO: VPUNPCKLBW (R11), X9, X2        // c4c1316013
+	//TODO: VPUNPCKLBW X2, X9, X2           // c4e13160d2 or c5b160d2
+	//TODO: VPUNPCKLBW X11, X9, X2          // c4c13160d3
+	//TODO: VPUNPCKLBW (BX), X9, X11        // c46131601b or c531601b
+	//TODO: VPUNPCKLBW (R11), X9, X11       // c44131601b
+	//TODO: VPUNPCKLBW X2, X9, X11          // c4613160da or c53160da
+	//TODO: VPUNPCKLBW X11, X9, X11         // c4413160db
+	//TODO: VPUNPCKLBW (BX), Y15, Y2        // c4e1056013 or c5856013
+	//TODO: VPUNPCKLBW (R11), Y15, Y2       // c4c1056013
+	//TODO: VPUNPCKLBW Y2, Y15, Y2          // c4e10560d2 or c58560d2
+	//TODO: VPUNPCKLBW Y11, Y15, Y2         // c4c10560d3
+	//TODO: VPUNPCKLBW (BX), Y15, Y11       // c46105601b or c505601b
+	//TODO: VPUNPCKLBW (R11), Y15, Y11      // c44105601b
+	//TODO: VPUNPCKLBW Y2, Y15, Y11         // c4610560da or c50560da
+	//TODO: VPUNPCKLBW Y11, Y15, Y11        // c4410560db
+	//TODO: VPUNPCKLDQ (BX), X9, X2         // c4e1316213 or c5b16213
+	//TODO: VPUNPCKLDQ (R11), X9, X2        // c4c1316213
+	//TODO: VPUNPCKLDQ X2, X9, X2           // c4e13162d2 or c5b162d2
+	//TODO: VPUNPCKLDQ X11, X9, X2          // c4c13162d3
+	//TODO: VPUNPCKLDQ (BX), X9, X11        // c46131621b or c531621b
+	//TODO: VPUNPCKLDQ (R11), X9, X11       // c44131621b
+	//TODO: VPUNPCKLDQ X2, X9, X11          // c4613162da or c53162da
+	//TODO: VPUNPCKLDQ X11, X9, X11         // c4413162db
+	//TODO: VPUNPCKLDQ (BX), Y15, Y2        // c4e1056213 or c5856213
+	//TODO: VPUNPCKLDQ (R11), Y15, Y2       // c4c1056213
+	//TODO: VPUNPCKLDQ Y2, Y15, Y2          // c4e10562d2 or c58562d2
+	//TODO: VPUNPCKLDQ Y11, Y15, Y2         // c4c10562d3
+	//TODO: VPUNPCKLDQ (BX), Y15, Y11       // c46105621b or c505621b
+	//TODO: VPUNPCKLDQ (R11), Y15, Y11      // c44105621b
+	//TODO: VPUNPCKLDQ Y2, Y15, Y11         // c4610562da or c50562da
+	//TODO: VPUNPCKLDQ Y11, Y15, Y11        // c4410562db
+	//TODO: VPUNPCKLQDQ (BX), X9, X2        // c4e1316c13 or c5b16c13
+	//TODO: VPUNPCKLQDQ (R11), X9, X2       // c4c1316c13
+	//TODO: VPUNPCKLQDQ X2, X9, X2          // c4e1316cd2 or c5b16cd2
+	//TODO: VPUNPCKLQDQ X11, X9, X2         // c4c1316cd3
+	//TODO: VPUNPCKLQDQ (BX), X9, X11       // c461316c1b or c5316c1b
+	//TODO: VPUNPCKLQDQ (R11), X9, X11      // c441316c1b
+	//TODO: VPUNPCKLQDQ X2, X9, X11         // c461316cda or c5316cda
+	//TODO: VPUNPCKLQDQ X11, X9, X11        // c441316cdb
+	//TODO: VPUNPCKLQDQ (BX), Y15, Y2       // c4e1056c13 or c5856c13
+	//TODO: VPUNPCKLQDQ (R11), Y15, Y2      // c4c1056c13
+	//TODO: VPUNPCKLQDQ Y2, Y15, Y2         // c4e1056cd2 or c5856cd2
+	//TODO: VPUNPCKLQDQ Y11, Y15, Y2        // c4c1056cd3
+	//TODO: VPUNPCKLQDQ (BX), Y15, Y11      // c461056c1b or c5056c1b
+	//TODO: VPUNPCKLQDQ (R11), Y15, Y11     // c441056c1b
+	//TODO: VPUNPCKLQDQ Y2, Y15, Y11        // c461056cda or c5056cda
+	//TODO: VPUNPCKLQDQ Y11, Y15, Y11       // c441056cdb
+	//TODO: VPUNPCKLWD (BX), X9, X2         // c4e1316113 or c5b16113
+	//TODO: VPUNPCKLWD (R11), X9, X2        // c4c1316113
+	//TODO: VPUNPCKLWD X2, X9, X2           // c4e13161d2 or c5b161d2
+	//TODO: VPUNPCKLWD X11, X9, X2          // c4c13161d3
+	//TODO: VPUNPCKLWD (BX), X9, X11        // c46131611b or c531611b
+	//TODO: VPUNPCKLWD (R11), X9, X11       // c44131611b
+	//TODO: VPUNPCKLWD X2, X9, X11          // c4613161da or c53161da
+	//TODO: VPUNPCKLWD X11, X9, X11         // c4413161db
+	//TODO: VPUNPCKLWD (BX), Y15, Y2        // c4e1056113 or c5856113
+	//TODO: VPUNPCKLWD (R11), Y15, Y2       // c4c1056113
+	//TODO: VPUNPCKLWD Y2, Y15, Y2          // c4e10561d2 or c58561d2
+	//TODO: VPUNPCKLWD Y11, Y15, Y2         // c4c10561d3
+	//TODO: VPUNPCKLWD (BX), Y15, Y11       // c46105611b or c505611b
+	//TODO: VPUNPCKLWD (R11), Y15, Y11      // c44105611b
+	//TODO: VPUNPCKLWD Y2, Y15, Y11         // c4610561da or c50561da
+	//TODO: VPUNPCKLWD Y11, Y15, Y11        // c4410561db
+	VPXOR (BX), X9, X2                      // c4e131ef13 or c5b1ef13
+	VPXOR (R11), X9, X2                     // c4c131ef13
+	VPXOR X2, X9, X2                        // c4e131efd2 or c5b1efd2
+	VPXOR X11, X9, X2                       // c4c131efd3
+	VPXOR (BX), X9, X11                     // c46131ef1b or c531ef1b
+	VPXOR (R11), X9, X11                    // c44131ef1b
+	VPXOR X2, X9, X11                       // c46131efda or c531efda
+	VPXOR X11, X9, X11                      // c44131efdb
+	VPXOR (BX), Y15, Y2                     // c4e105ef13 or c585ef13
+	VPXOR (R11), Y15, Y2                    // c4c105ef13
+	VPXOR Y2, Y15, Y2                       // c4e105efd2 or c585efd2
+	VPXOR Y11, Y15, Y2                      // c4c105efd3
+	VPXOR (BX), Y15, Y11                    // c46105ef1b or c505ef1b
+	VPXOR (R11), Y15, Y11                   // c44105ef1b
+	VPXOR Y2, Y15, Y11                      // c46105efda or c505efda
+	VPXOR Y11, Y15, Y11                     // c44105efdb
+	//TODO: VRCPPS (BX), X2                 // c4e1785313 or c5f85313
+	//TODO: VRCPPS (R11), X2                // c4c1785313
+	//TODO: VRCPPS X2, X2                   // c4e17853d2 or c5f853d2
+	//TODO: VRCPPS X11, X2                  // c4c17853d3
+	//TODO: VRCPPS (BX), X11                // c46178531b or c578531b
+	//TODO: VRCPPS (R11), X11               // c44178531b
+	//TODO: VRCPPS X2, X11                  // c4617853da or c57853da
+	//TODO: VRCPPS X11, X11                 // c4417853db
+	//TODO: VRCPPS (BX), Y2                 // c4e17c5313 or c5fc5313
+	//TODO: VRCPPS (R11), Y2                // c4c17c5313
+	//TODO: VRCPPS Y2, Y2                   // c4e17c53d2 or c5fc53d2
+	//TODO: VRCPPS Y11, Y2                  // c4c17c53d3
+	//TODO: VRCPPS (BX), Y11                // c4617c531b or c57c531b
+	//TODO: VRCPPS (R11), Y11               // c4417c531b
+	//TODO: VRCPPS Y2, Y11                  // c4617c53da or c57c53da
+	//TODO: VRCPPS Y11, Y11                 // c4417c53db
+	//TODO: VRCPSS (BX), X9, X2             // c4e1325313 or c5b25313
+	//TODO: VRCPSS (R11), X9, X2            // c4c1325313
+	//TODO: VRCPSS X2, X9, X2               // c4e13253d2 or c5b253d2
+	//TODO: VRCPSS X11, X9, X2              // c4c13253d3
+	//TODO: VRCPSS (BX), X9, X11            // c46132531b or c532531b
+	//TODO: VRCPSS (R11), X9, X11           // c44132531b
+	//TODO: VRCPSS X2, X9, X11              // c4613253da or c53253da
+	//TODO: VRCPSS X11, X9, X11             // c4413253db
+	//TODO: VROUNDPD $7, (BX), X2           // c4e379091307
+	//TODO: VROUNDPD $7, (R11), X2          // c4c379091307
+	//TODO: VROUNDPD $7, X2, X2             // c4e37909d207
+	//TODO: VROUNDPD $7, X11, X2            // c4c37909d307
+	//TODO: VROUNDPD $7, (BX), X11          // c46379091b07
+	//TODO: VROUNDPD $7, (R11), X11         // c44379091b07
+	//TODO: VROUNDPD $7, X2, X11            // c4637909da07
+	//TODO: VROUNDPD $7, X11, X11           // c4437909db07
+	//TODO: VROUNDPD $7, (BX), Y2           // c4e37d091307
+	//TODO: VROUNDPD $7, (R11), Y2          // c4c37d091307
+	//TODO: VROUNDPD $7, Y2, Y2             // c4e37d09d207
+	//TODO: VROUNDPD $7, Y11, Y2            // c4c37d09d307
+	//TODO: VROUNDPD $7, (BX), Y11          // c4637d091b07
+	//TODO: VROUNDPD $7, (R11), Y11         // c4437d091b07
+	//TODO: VROUNDPD $7, Y2, Y11            // c4637d09da07
+	//TODO: VROUNDPD $7, Y11, Y11           // c4437d09db07
+	//TODO: VROUNDPS $7, (BX), X2           // c4e379081307
+	//TODO: VROUNDPS $7, (R11), X2          // c4c379081307
+	//TODO: VROUNDPS $7, X2, X2             // c4e37908d207
+	//TODO: VROUNDPS $7, X11, X2            // c4c37908d307
+	//TODO: VROUNDPS $7, (BX), X11          // c46379081b07
+	//TODO: VROUNDPS $7, (R11), X11         // c44379081b07
+	//TODO: VROUNDPS $7, X2, X11            // c4637908da07
+	//TODO: VROUNDPS $7, X11, X11           // c4437908db07
+	//TODO: VROUNDPS $7, (BX), Y2           // c4e37d081307
+	//TODO: VROUNDPS $7, (R11), Y2          // c4c37d081307
+	//TODO: VROUNDPS $7, Y2, Y2             // c4e37d08d207
+	//TODO: VROUNDPS $7, Y11, Y2            // c4c37d08d307
+	//TODO: VROUNDPS $7, (BX), Y11          // c4637d081b07
+	//TODO: VROUNDPS $7, (R11), Y11         // c4437d081b07
+	//TODO: VROUNDPS $7, Y2, Y11            // c4637d08da07
+	//TODO: VROUNDPS $7, Y11, Y11           // c4437d08db07
+	//TODO: VROUNDSD $7, (BX), X9, X2       // c4e3310b1307
+	//TODO: VROUNDSD $7, (R11), X9, X2      // c4c3310b1307
+	//TODO: VROUNDSD $7, X2, X9, X2         // c4e3310bd207
+	//TODO: VROUNDSD $7, X11, X9, X2        // c4c3310bd307
+	//TODO: VROUNDSD $7, (BX), X9, X11      // c463310b1b07
+	//TODO: VROUNDSD $7, (R11), X9, X11     // c443310b1b07
+	//TODO: VROUNDSD $7, X2, X9, X11        // c463310bda07
+	//TODO: VROUNDSD $7, X11, X9, X11       // c443310bdb07
+	//TODO: VROUNDSS $7, (BX), X9, X2       // c4e3310a1307
+	//TODO: VROUNDSS $7, (R11), X9, X2      // c4c3310a1307
+	//TODO: VROUNDSS $7, X2, X9, X2         // c4e3310ad207
+	//TODO: VROUNDSS $7, X11, X9, X2        // c4c3310ad307
+	//TODO: VROUNDSS $7, (BX), X9, X11      // c463310a1b07
+	//TODO: VROUNDSS $7, (R11), X9, X11     // c443310a1b07
+	//TODO: VROUNDSS $7, X2, X9, X11        // c463310ada07
+	//TODO: VROUNDSS $7, X11, X9, X11       // c443310adb07
+	//TODO: VRSQRTPS (BX), X2               // c4e1785213 or c5f85213
+	//TODO: VRSQRTPS (R11), X2              // c4c1785213
+	//TODO: VRSQRTPS X2, X2                 // c4e17852d2 or c5f852d2
+	//TODO: VRSQRTPS X11, X2                // c4c17852d3
+	//TODO: VRSQRTPS (BX), X11              // c46178521b or c578521b
+	//TODO: VRSQRTPS (R11), X11             // c44178521b
+	//TODO: VRSQRTPS X2, X11                // c4617852da or c57852da
+	//TODO: VRSQRTPS X11, X11               // c4417852db
+	//TODO: VRSQRTPS (BX), Y2               // c4e17c5213 or c5fc5213
+	//TODO: VRSQRTPS (R11), Y2              // c4c17c5213
+	//TODO: VRSQRTPS Y2, Y2                 // c4e17c52d2 or c5fc52d2
+	//TODO: VRSQRTPS Y11, Y2                // c4c17c52d3
+	//TODO: VRSQRTPS (BX), Y11              // c4617c521b or c57c521b
+	//TODO: VRSQRTPS (R11), Y11             // c4417c521b
+	//TODO: VRSQRTPS Y2, Y11                // c4617c52da or c57c52da
+	//TODO: VRSQRTPS Y11, Y11               // c4417c52db
+	//TODO: VRSQRTSS (BX), X9, X2           // c4e1325213 or c5b25213
+	//TODO: VRSQRTSS (R11), X9, X2          // c4c1325213
+	//TODO: VRSQRTSS X2, X9, X2             // c4e13252d2 or c5b252d2
+	//TODO: VRSQRTSS X11, X9, X2            // c4c13252d3
+	//TODO: VRSQRTSS (BX), X9, X11          // c46132521b or c532521b
+	//TODO: VRSQRTSS (R11), X9, X11         // c44132521b
+	//TODO: VRSQRTSS X2, X9, X11            // c4613252da or c53252da
+	//TODO: VRSQRTSS X11, X9, X11           // c4413252db
+	//TODO: VSHUFPD $7, (BX), X9, X2        // c4e131c61307 or c5b1c61307
+	//TODO: VSHUFPD $7, (R11), X9, X2       // c4c131c61307
+	//TODO: VSHUFPD $7, X2, X9, X2          // c4e131c6d207 or c5b1c6d207
+	//TODO: VSHUFPD $7, X11, X9, X2         // c4c131c6d307
+	//TODO: VSHUFPD $7, (BX), X9, X11       // c46131c61b07 or c531c61b07
+	//TODO: VSHUFPD $7, (R11), X9, X11      // c44131c61b07
+	//TODO: VSHUFPD $7, X2, X9, X11         // c46131c6da07 or c531c6da07
+	//TODO: VSHUFPD $7, X11, X9, X11        // c44131c6db07
+	//TODO: VSHUFPD $7, (BX), Y15, Y2       // c4e105c61307 or c585c61307
+	//TODO: VSHUFPD $7, (R11), Y15, Y2      // c4c105c61307
+	//TODO: VSHUFPD $7, Y2, Y15, Y2         // c4e105c6d207 or c585c6d207
+	//TODO: VSHUFPD $7, Y11, Y15, Y2        // c4c105c6d307
+	//TODO: VSHUFPD $7, (BX), Y15, Y11      // c46105c61b07 or c505c61b07
+	//TODO: VSHUFPD $7, (R11), Y15, Y11     // c44105c61b07
+	//TODO: VSHUFPD $7, Y2, Y15, Y11        // c46105c6da07 or c505c6da07
+	//TODO: VSHUFPD $7, Y11, Y15, Y11       // c44105c6db07
+	//TODO: VSHUFPS $7, (BX), X9, X2        // c4e130c61307 or c5b0c61307
+	//TODO: VSHUFPS $7, (R11), X9, X2       // c4c130c61307
+	//TODO: VSHUFPS $7, X2, X9, X2          // c4e130c6d207 or c5b0c6d207
+	//TODO: VSHUFPS $7, X11, X9, X2         // c4c130c6d307
+	//TODO: VSHUFPS $7, (BX), X9, X11       // c46130c61b07 or c530c61b07
+	//TODO: VSHUFPS $7, (R11), X9, X11      // c44130c61b07
+	//TODO: VSHUFPS $7, X2, X9, X11         // c46130c6da07 or c530c6da07
+	//TODO: VSHUFPS $7, X11, X9, X11        // c44130c6db07
+	//TODO: VSHUFPS $7, (BX), Y15, Y2       // c4e104c61307 or c584c61307
+	//TODO: VSHUFPS $7, (R11), Y15, Y2      // c4c104c61307
+	//TODO: VSHUFPS $7, Y2, Y15, Y2         // c4e104c6d207 or c584c6d207
+	//TODO: VSHUFPS $7, Y11, Y15, Y2        // c4c104c6d307
+	//TODO: VSHUFPS $7, (BX), Y15, Y11      // c46104c61b07 or c504c61b07
+	//TODO: VSHUFPS $7, (R11), Y15, Y11     // c44104c61b07
+	//TODO: VSHUFPS $7, Y2, Y15, Y11        // c46104c6da07 or c504c6da07
+	//TODO: VSHUFPS $7, Y11, Y15, Y11       // c44104c6db07
+	//TODO: VSQRTPD (BX), X2                // c4e1795113 or c5f95113
+	//TODO: VSQRTPD (R11), X2               // c4c1795113
+	//TODO: VSQRTPD X2, X2                  // c4e17951d2 or c5f951d2
+	//TODO: VSQRTPD X11, X2                 // c4c17951d3
+	//TODO: VSQRTPD (BX), X11               // c46179511b or c579511b
+	//TODO: VSQRTPD (R11), X11              // c44179511b
+	//TODO: VSQRTPD X2, X11                 // c4617951da or c57951da
+	//TODO: VSQRTPD X11, X11                // c4417951db
+	//TODO: VSQRTPD (BX), Y2                // c4e17d5113 or c5fd5113
+	//TODO: VSQRTPD (R11), Y2               // c4c17d5113
+	//TODO: VSQRTPD Y2, Y2                  // c4e17d51d2 or c5fd51d2
+	//TODO: VSQRTPD Y11, Y2                 // c4c17d51d3
+	//TODO: VSQRTPD (BX), Y11               // c4617d511b or c57d511b
+	//TODO: VSQRTPD (R11), Y11              // c4417d511b
+	//TODO: VSQRTPD Y2, Y11                 // c4617d51da or c57d51da
+	//TODO: VSQRTPD Y11, Y11                // c4417d51db
+	//TODO: VSQRTPS (BX), X2                // c4e1785113 or c5f85113
+	//TODO: VSQRTPS (R11), X2               // c4c1785113
+	//TODO: VSQRTPS X2, X2                  // c4e17851d2 or c5f851d2
+	//TODO: VSQRTPS X11, X2                 // c4c17851d3
+	//TODO: VSQRTPS (BX), X11               // c46178511b or c578511b
+	//TODO: VSQRTPS (R11), X11              // c44178511b
+	//TODO: VSQRTPS X2, X11                 // c4617851da or c57851da
+	//TODO: VSQRTPS X11, X11                // c4417851db
+	//TODO: VSQRTPS (BX), Y2                // c4e17c5113 or c5fc5113
+	//TODO: VSQRTPS (R11), Y2               // c4c17c5113
+	//TODO: VSQRTPS Y2, Y2                  // c4e17c51d2 or c5fc51d2
+	//TODO: VSQRTPS Y11, Y2                 // c4c17c51d3
+	//TODO: VSQRTPS (BX), Y11               // c4617c511b or c57c511b
+	//TODO: VSQRTPS (R11), Y11              // c4417c511b
+	//TODO: VSQRTPS Y2, Y11                 // c4617c51da or c57c51da
+	//TODO: VSQRTPS Y11, Y11                // c4417c51db
+	//TODO: VSQRTSD (BX), X9, X2            // c4e1335113 or c5b35113
+	//TODO: VSQRTSD (R11), X9, X2           // c4c1335113
+	//TODO: VSQRTSD X2, X9, X2              // c4e13351d2 or c5b351d2
+	//TODO: VSQRTSD X11, X9, X2             // c4c13351d3
+	//TODO: VSQRTSD (BX), X9, X11           // c46133511b or c533511b
+	//TODO: VSQRTSD (R11), X9, X11          // c44133511b
+	//TODO: VSQRTSD X2, X9, X11             // c4613351da or c53351da
+	//TODO: VSQRTSD X11, X9, X11            // c4413351db
+	//TODO: VSQRTSS (BX), X9, X2            // c4e1325113 or c5b25113
+	//TODO: VSQRTSS (R11), X9, X2           // c4c1325113
+	//TODO: VSQRTSS X2, X9, X2              // c4e13251d2 or c5b251d2
+	//TODO: VSQRTSS X11, X9, X2             // c4c13251d3
+	//TODO: VSQRTSS (BX), X9, X11           // c46132511b or c532511b
+	//TODO: VSQRTSS (R11), X9, X11          // c44132511b
+	//TODO: VSQRTSS X2, X9, X11             // c4613251da or c53251da
+	//TODO: VSQRTSS X11, X9, X11            // c4413251db
+	//TODO: VSTMXCSR (BX)                   // c4e178ae1b or c5f8ae1b
+	//TODO: VSTMXCSR (R11)                  // c4c178ae1b
+	//TODO: VSUBPD (BX), X9, X2             // c4e1315c13 or c5b15c13
+	//TODO: VSUBPD (R11), X9, X2            // c4c1315c13
+	//TODO: VSUBPD X2, X9, X2               // c4e1315cd2 or c5b15cd2
+	//TODO: VSUBPD X11, X9, X2              // c4c1315cd3
+	//TODO: VSUBPD (BX), X9, X11            // c461315c1b or c5315c1b
+	//TODO: VSUBPD (R11), X9, X11           // c441315c1b
+	//TODO: VSUBPD X2, X9, X11              // c461315cda or c5315cda
+	//TODO: VSUBPD X11, X9, X11             // c441315cdb
+	//TODO: VSUBPD (BX), Y15, Y2            // c4e1055c13 or c5855c13
+	//TODO: VSUBPD (R11), Y15, Y2           // c4c1055c13
+	//TODO: VSUBPD Y2, Y15, Y2              // c4e1055cd2 or c5855cd2
+	//TODO: VSUBPD Y11, Y15, Y2             // c4c1055cd3
+	//TODO: VSUBPD (BX), Y15, Y11           // c461055c1b or c5055c1b
+	//TODO: VSUBPD (R11), Y15, Y11          // c441055c1b
+	//TODO: VSUBPD Y2, Y15, Y11             // c461055cda or c5055cda
+	//TODO: VSUBPD Y11, Y15, Y11            // c441055cdb
+	//TODO: VSUBPS (BX), X9, X2             // c4e1305c13 or c5b05c13
+	//TODO: VSUBPS (R11), X9, X2            // c4c1305c13
+	//TODO: VSUBPS X2, X9, X2               // c4e1305cd2 or c5b05cd2
+	//TODO: VSUBPS X11, X9, X2              // c4c1305cd3
+	//TODO: VSUBPS (BX), X9, X11            // c461305c1b or c5305c1b
+	//TODO: VSUBPS (R11), X9, X11           // c441305c1b
+	//TODO: VSUBPS X2, X9, X11              // c461305cda or c5305cda
+	//TODO: VSUBPS X11, X9, X11             // c441305cdb
+	//TODO: VSUBPS (BX), Y15, Y2            // c4e1045c13 or c5845c13
+	//TODO: VSUBPS (R11), Y15, Y2           // c4c1045c13
+	//TODO: VSUBPS Y2, Y15, Y2              // c4e1045cd2 or c5845cd2
+	//TODO: VSUBPS Y11, Y15, Y2             // c4c1045cd3
+	//TODO: VSUBPS (BX), Y15, Y11           // c461045c1b or c5045c1b
+	//TODO: VSUBPS (R11), Y15, Y11          // c441045c1b
+	//TODO: VSUBPS Y2, Y15, Y11             // c461045cda or c5045cda
+	//TODO: VSUBPS Y11, Y15, Y11            // c441045cdb
+	//TODO: VSUBSD (BX), X9, X2             // c4e1335c13 or c5b35c13
+	//TODO: VSUBSD (R11), X9, X2            // c4c1335c13
+	//TODO: VSUBSD X2, X9, X2               // c4e1335cd2 or c5b35cd2
+	//TODO: VSUBSD X11, X9, X2              // c4c1335cd3
+	//TODO: VSUBSD (BX), X9, X11            // c461335c1b or c5335c1b
+	//TODO: VSUBSD (R11), X9, X11           // c441335c1b
+	//TODO: VSUBSD X2, X9, X11              // c461335cda or c5335cda
+	//TODO: VSUBSD X11, X9, X11             // c441335cdb
+	//TODO: VSUBSS (BX), X9, X2             // c4e1325c13 or c5b25c13
+	//TODO: VSUBSS (R11), X9, X2            // c4c1325c13
+	//TODO: VSUBSS X2, X9, X2               // c4e1325cd2 or c5b25cd2
+	//TODO: VSUBSS X11, X9, X2              // c4c1325cd3
+	//TODO: VSUBSS (BX), X9, X11            // c461325c1b or c5325c1b
+	//TODO: VSUBSS (R11), X9, X11           // c441325c1b
+	//TODO: VSUBSS X2, X9, X11              // c461325cda or c5325cda
+	//TODO: VSUBSS X11, X9, X11             // c441325cdb
+	//TODO: VTESTPD (BX), X2                // c4e2790f13
+	//TODO: VTESTPD (R11), X2               // c4c2790f13
+	//TODO: VTESTPD X2, X2                  // c4e2790fd2
+	//TODO: VTESTPD X11, X2                 // c4c2790fd3
+	//TODO: VTESTPD (BX), X11               // c462790f1b
+	//TODO: VTESTPD (R11), X11              // c442790f1b
+	//TODO: VTESTPD X2, X11                 // c462790fda
+	//TODO: VTESTPD X11, X11                // c442790fdb
+	//TODO: VTESTPD (BX), Y2                // c4e27d0f13
+	//TODO: VTESTPD (R11), Y2               // c4c27d0f13
+	//TODO: VTESTPD Y2, Y2                  // c4e27d0fd2
+	//TODO: VTESTPD Y11, Y2                 // c4c27d0fd3
+	//TODO: VTESTPD (BX), Y11               // c4627d0f1b
+	//TODO: VTESTPD (R11), Y11              // c4427d0f1b
+	//TODO: VTESTPD Y2, Y11                 // c4627d0fda
+	//TODO: VTESTPD Y11, Y11                // c4427d0fdb
+	//TODO: VTESTPS (BX), X2                // c4e2790e13
+	//TODO: VTESTPS (R11), X2               // c4c2790e13
+	//TODO: VTESTPS X2, X2                  // c4e2790ed2
+	//TODO: VTESTPS X11, X2                 // c4c2790ed3
+	//TODO: VTESTPS (BX), X11               // c462790e1b
+	//TODO: VTESTPS (R11), X11              // c442790e1b
+	//TODO: VTESTPS X2, X11                 // c462790eda
+	//TODO: VTESTPS X11, X11                // c442790edb
+	//TODO: VTESTPS (BX), Y2                // c4e27d0e13
+	//TODO: VTESTPS (R11), Y2               // c4c27d0e13
+	//TODO: VTESTPS Y2, Y2                  // c4e27d0ed2
+	//TODO: VTESTPS Y11, Y2                 // c4c27d0ed3
+	//TODO: VTESTPS (BX), Y11               // c4627d0e1b
+	//TODO: VTESTPS (R11), Y11              // c4427d0e1b
+	//TODO: VTESTPS Y2, Y11                 // c4627d0eda
+	//TODO: VTESTPS Y11, Y11                // c4427d0edb
+	//TODO: VUCOMISD (BX), X2               // c4e1792e13 or c5f92e13
+	//TODO: VUCOMISD (R11), X2              // c4c1792e13
+	//TODO: VUCOMISD X2, X2                 // c4e1792ed2 or c5f92ed2
+	//TODO: VUCOMISD X11, X2                // c4c1792ed3
+	//TODO: VUCOMISD (BX), X11              // c461792e1b or c5792e1b
+	//TODO: VUCOMISD (R11), X11             // c441792e1b
+	//TODO: VUCOMISD X2, X11                // c461792eda or c5792eda
+	//TODO: VUCOMISD X11, X11               // c441792edb
+	//TODO: VUCOMISS (BX), X2               // c4e1782e13 or c5f82e13
+	//TODO: VUCOMISS (R11), X2              // c4c1782e13
+	//TODO: VUCOMISS X2, X2                 // c4e1782ed2 or c5f82ed2
+	//TODO: VUCOMISS X11, X2                // c4c1782ed3
+	//TODO: VUCOMISS (BX), X11              // c461782e1b or c5782e1b
+	//TODO: VUCOMISS (R11), X11             // c441782e1b
+	//TODO: VUCOMISS X2, X11                // c461782eda or c5782eda
+	//TODO: VUCOMISS X11, X11               // c441782edb
+	//TODO: VUNPCKHPD (BX), X9, X2          // c4e1311513 or c5b11513
+	//TODO: VUNPCKHPD (R11), X9, X2         // c4c1311513
+	//TODO: VUNPCKHPD X2, X9, X2            // c4e13115d2 or c5b115d2
+	//TODO: VUNPCKHPD X11, X9, X2           // c4c13115d3
+	//TODO: VUNPCKHPD (BX), X9, X11         // c46131151b or c531151b
+	//TODO: VUNPCKHPD (R11), X9, X11        // c44131151b
+	//TODO: VUNPCKHPD X2, X9, X11           // c4613115da or c53115da
+	//TODO: VUNPCKHPD X11, X9, X11          // c4413115db
+	//TODO: VUNPCKHPD (BX), Y15, Y2         // c4e1051513 or c5851513
+	//TODO: VUNPCKHPD (R11), Y15, Y2        // c4c1051513
+	//TODO: VUNPCKHPD Y2, Y15, Y2           // c4e10515d2 or c58515d2
+	//TODO: VUNPCKHPD Y11, Y15, Y2          // c4c10515d3
+	//TODO: VUNPCKHPD (BX), Y15, Y11        // c46105151b or c505151b
+	//TODO: VUNPCKHPD (R11), Y15, Y11       // c44105151b
+	//TODO: VUNPCKHPD Y2, Y15, Y11          // c4610515da or c50515da
+	//TODO: VUNPCKHPD Y11, Y15, Y11         // c4410515db
+	//TODO: VUNPCKHPS (BX), X9, X2          // c4e1301513 or c5b01513
+	//TODO: VUNPCKHPS (R11), X9, X2         // c4c1301513
+	//TODO: VUNPCKHPS X2, X9, X2            // c4e13015d2 or c5b015d2
+	//TODO: VUNPCKHPS X11, X9, X2           // c4c13015d3
+	//TODO: VUNPCKHPS (BX), X9, X11         // c46130151b or c530151b
+	//TODO: VUNPCKHPS (R11), X9, X11        // c44130151b
+	//TODO: VUNPCKHPS X2, X9, X11           // c4613015da or c53015da
+	//TODO: VUNPCKHPS X11, X9, X11          // c4413015db
+	//TODO: VUNPCKHPS (BX), Y15, Y2         // c4e1041513 or c5841513
+	//TODO: VUNPCKHPS (R11), Y15, Y2        // c4c1041513
+	//TODO: VUNPCKHPS Y2, Y15, Y2           // c4e10415d2 or c58415d2
+	//TODO: VUNPCKHPS Y11, Y15, Y2          // c4c10415d3
+	//TODO: VUNPCKHPS (BX), Y15, Y11        // c46104151b or c504151b
+	//TODO: VUNPCKHPS (R11), Y15, Y11       // c44104151b
+	//TODO: VUNPCKHPS Y2, Y15, Y11          // c4610415da or c50415da
+	//TODO: VUNPCKHPS Y11, Y15, Y11         // c4410415db
+	//TODO: VUNPCKLPD (BX), X9, X2          // c4e1311413 or c5b11413
+	//TODO: VUNPCKLPD (R11), X9, X2         // c4c1311413
+	//TODO: VUNPCKLPD X2, X9, X2            // c4e13114d2 or c5b114d2
+	//TODO: VUNPCKLPD X11, X9, X2           // c4c13114d3
+	//TODO: VUNPCKLPD (BX), X9, X11         // c46131141b or c531141b
+	//TODO: VUNPCKLPD (R11), X9, X11        // c44131141b
+	//TODO: VUNPCKLPD X2, X9, X11           // c4613114da or c53114da
+	//TODO: VUNPCKLPD X11, X9, X11          // c4413114db
+	//TODO: VUNPCKLPD (BX), Y15, Y2         // c4e1051413 or c5851413
+	//TODO: VUNPCKLPD (R11), Y15, Y2        // c4c1051413
+	//TODO: VUNPCKLPD Y2, Y15, Y2           // c4e10514d2 or c58514d2
+	//TODO: VUNPCKLPD Y11, Y15, Y2          // c4c10514d3
+	//TODO: VUNPCKLPD (BX), Y15, Y11        // c46105141b or c505141b
+	//TODO: VUNPCKLPD (R11), Y15, Y11       // c44105141b
+	//TODO: VUNPCKLPD Y2, Y15, Y11          // c4610514da or c50514da
+	//TODO: VUNPCKLPD Y11, Y15, Y11         // c4410514db
+	//TODO: VUNPCKLPS (BX), X9, X2          // c4e1301413 or c5b01413
+	//TODO: VUNPCKLPS (R11), X9, X2         // c4c1301413
+	//TODO: VUNPCKLPS X2, X9, X2            // c4e13014d2 or c5b014d2
+	//TODO: VUNPCKLPS X11, X9, X2           // c4c13014d3
+	//TODO: VUNPCKLPS (BX), X9, X11         // c46130141b or c530141b
+	//TODO: VUNPCKLPS (R11), X9, X11        // c44130141b
+	//TODO: VUNPCKLPS X2, X9, X11           // c4613014da or c53014da
+	//TODO: VUNPCKLPS X11, X9, X11          // c4413014db
+	//TODO: VUNPCKLPS (BX), Y15, Y2         // c4e1041413 or c5841413
+	//TODO: VUNPCKLPS (R11), Y15, Y2        // c4c1041413
+	//TODO: VUNPCKLPS Y2, Y15, Y2           // c4e10414d2 or c58414d2
+	//TODO: VUNPCKLPS Y11, Y15, Y2          // c4c10414d3
+	//TODO: VUNPCKLPS (BX), Y15, Y11        // c46104141b or c504141b
+	//TODO: VUNPCKLPS (R11), Y15, Y11       // c44104141b
+	//TODO: VUNPCKLPS Y2, Y15, Y11          // c4610414da or c50414da
+	//TODO: VUNPCKLPS Y11, Y15, Y11         // c4410414db
+	//TODO: VXORPD (BX), X9, X2             // c4e1315713 or c5b15713
+	//TODO: VXORPD (R11), X9, X2            // c4c1315713
+	//TODO: VXORPD X2, X9, X2               // c4e13157d2 or c5b157d2
+	//TODO: VXORPD X11, X9, X2              // c4c13157d3
+	//TODO: VXORPD (BX), X9, X11            // c46131571b or c531571b
+	//TODO: VXORPD (R11), X9, X11           // c44131571b
+	//TODO: VXORPD X2, X9, X11              // c4613157da or c53157da
+	//TODO: VXORPD X11, X9, X11             // c4413157db
+	//TODO: VXORPD (BX), Y15, Y2            // c4e1055713 or c5855713
+	//TODO: VXORPD (R11), Y15, Y2           // c4c1055713
+	//TODO: VXORPD Y2, Y15, Y2              // c4e10557d2 or c58557d2
+	//TODO: VXORPD Y11, Y15, Y2             // c4c10557d3
+	//TODO: VXORPD (BX), Y15, Y11           // c46105571b or c505571b
+	//TODO: VXORPD (R11), Y15, Y11          // c44105571b
+	//TODO: VXORPD Y2, Y15, Y11             // c4610557da or c50557da
+	//TODO: VXORPD Y11, Y15, Y11            // c4410557db
+	//TODO: VXORPS (BX), X9, X2             // c4e1305713 or c5b05713
+	//TODO: VXORPS (R11), X9, X2            // c4c1305713
+	//TODO: VXORPS X2, X9, X2               // c4e13057d2 or c5b057d2
+	//TODO: VXORPS X11, X9, X2              // c4c13057d3
+	//TODO: VXORPS (BX), X9, X11            // c46130571b or c530571b
+	//TODO: VXORPS (R11), X9, X11           // c44130571b
+	//TODO: VXORPS X2, X9, X11              // c4613057da or c53057da
+	//TODO: VXORPS X11, X9, X11             // c4413057db
+	//TODO: VXORPS (BX), Y15, Y2            // c4e1045713 or c5845713
+	//TODO: VXORPS (R11), Y15, Y2           // c4c1045713
+	//TODO: VXORPS Y2, Y15, Y2              // c4e10457d2 or c58457d2
+	//TODO: VXORPS Y11, Y15, Y2             // c4c10457d3
+	//TODO: VXORPS (BX), Y15, Y11           // c46104571b or c504571b
+	//TODO: VXORPS (R11), Y15, Y11          // c44104571b
+	//TODO: VXORPS Y2, Y15, Y11             // c4610457da or c50457da
+	//TODO: VXORPS Y11, Y15, Y11            // c4410457db
+	//TODO: VZEROALL                        // c4e17c77 or c5fc77
+	VZEROUPPER                              // c4e17877 or c5f877
+	WBINVD                                  // 0f09
+	//TODO: WRFSBASE DX                     // f30faed2 or f3480faed2
+	//TODO: WRFSBASE R11                    // f3410faed3 or f3490faed3
+	//TODO: WRGSBASE DX                     // f30faeda or f3480faeda
+	//TODO: WRGSBASE R11                    // f3410faedb or f3490faedb
+	WRMSR                                   // 0f30
+	//TODO: WRPKRU                          // 0f01ef
+	XABORT $7                               // c6f807
+	XADDW DX, (BX)                          // 660fc113
+	XADDW R11, (BX)                         // 66440fc11b
+	XADDW DX, (R11)                         // 66410fc113
+	XADDW R11, (R11)                        // 66450fc11b
+	XADDW DX, DX                            // 660fc1d2
+	XADDW R11, DX                           // 66440fc1da
+	XADDW DX, R11                           // 66410fc1d3
+	XADDW R11, R11                          // 66450fc1db
+	XADDL DX, (BX)                          // 0fc113
+	XADDL R11, (BX)                         // 440fc11b
+	XADDL DX, (R11)                         // 410fc113
+	XADDL R11, (R11)                        // 450fc11b
+	XADDL DX, DX                            // 0fc1d2
+	XADDL R11, DX                           // 440fc1da
+	XADDL DX, R11                           // 410fc1d3
+	XADDL R11, R11                          // 450fc1db
+	XADDQ DX, (BX)                          // 480fc113
+	XADDQ R11, (BX)                         // 4c0fc11b
+	XADDQ DX, (R11)                         // 490fc113
+	XADDQ R11, (R11)                        // 4d0fc11b
+	XADDQ DX, DX                            // 480fc1d2
+	XADDQ R11, DX                           // 4c0fc1da
+	XADDQ DX, R11                           // 490fc1d3
+	XADDQ R11, R11                          // 4d0fc1db
+	XADDB DL, (BX)                          // 0fc013
+	XADDB R11, (BX)                         // 440fc01b
+	XADDB DL, (R11)                         // 410fc013
+	XADDB R11, (R11)                        // 450fc01b
+	XADDB DL, DL                            // 0fc0d2
+	XADDB R11, DL                           // 440fc0da
+	XADDB DL, R11                           // 410fc0d3
+	XADDB R11, R11                          // 450fc0db
+	//TODO: XBEGIN .+$0x1122                // 66c7f82211
+	//TODO: XBEGIN .+$0x11223344            // c7f844332211
+	XCHGW DX, (BX)                          // 668713
+	XCHGW R11, (BX)                         // 6644871b
+	XCHGW DX, (R11)                         // 66418713
+	XCHGW R11, (R11)                        // 6645871b
+	XCHGW DX, DX                            // 6687d2
+	XCHGW R11, DX                           // 664487da
+	XCHGW DX, R11                           // 664187d3
+	XCHGW R11, R11                          // 664587db
+	XCHGL DX, (BX)                          // 8713
+	XCHGL R11, (BX)                         // 44871b
+	XCHGL DX, (R11)                         // 418713
+	XCHGL R11, (R11)                        // 45871b
+	XCHGL DX, DX                            // 87d2
+	XCHGL R11, DX                           // 4487da
+	XCHGL DX, R11                           // 4187d3
+	XCHGL R11, R11                          // 4587db
+	XCHGQ DX, (BX)                          // 488713
+	XCHGQ R11, (BX)                         // 4c871b
+	XCHGQ DX, (R11)                         // 498713
+	XCHGQ R11, (R11)                        // 4d871b
+	XCHGQ DX, DX                            // 4887d2
+	XCHGQ R11, DX                           // 4c87da
+	XCHGQ DX, R11                           // 4987d3
+	XCHGQ R11, R11                          // 4d87db
+	XCHGB DL, (BX)                          // 8613
+	XCHGB R11, (BX)                         // 44861b
+	XCHGB DL, (R11)                         // 418613
+	XCHGB R11, (R11)                        // 45861b
+	XCHGB DL, DL                            // 86d2
+	XCHGB R11, DL                           // 4486da
+	XCHGB DL, R11                           // 4186d3
+	XCHGB R11, R11                          // 4586db
+	XCHGW AX, DX                            // 6692
+	XCHGW AX, R11                           // 664193
+	XCHGL AX, DX                            // 92
+	XCHGL AX, R11                           // 4193
+	XCHGQ AX, DX                            // 4892
+	XCHGQ AX, R11                           // 4993
+	XEND                                    // 0f01d5
+	XGETBV                                  // 0f01d0
+	XLAT                                    // d7
+	XORB $7, AL                             // 3407
+	XORW $61731, AX                         // 663523f1
+	XORL $4045620583, AX                    // 35674523f1
+	XORQ $-249346713, AX                    // 4835674523f1
+	XORW $61731, (BX)                       // 66813323f1
+	XORW $61731, (R11)                      // 6641813323f1
+	XORW $61731, DX                         // 6681f223f1
+	XORW $61731, R11                        // 664181f323f1
+	XORW $7, (BX)                           // 66833307
+	XORW $7, (R11)                          // 6641833307
+	XORW $7, DX                             // 6683f207
+	XORW $7, R11                            // 664183f307
+	XORW DX, (BX)                           // 663113
+	XORW R11, (BX)                          // 6644311b
+	XORW DX, (R11)                          // 66413113
+	XORW R11, (R11)                         // 6645311b
+	XORW DX, DX                             // 6631d2 or 6633d2
+	XORW R11, DX                            // 664431da or 664133d3
+	XORW DX, R11                            // 664131d3 or 664433da
+	XORW R11, R11                           // 664531db or 664533db
+	XORL $4045620583, (BX)                  // 8133674523f1
+	XORL $4045620583, (R11)                 // 418133674523f1
+	XORL $4045620583, DX                    // 81f2674523f1
+	XORL $4045620583, R11                   // 4181f3674523f1
+	XORL $7, (BX)                           // 833307
+	XORL $7, (R11)                          // 41833307
+	XORL $7, DX                             // 83f207
+	XORL $7, R11                            // 4183f307
+	XORL DX, (BX)                           // 3113
+	XORL R11, (BX)                          // 44311b
+	XORL DX, (R11)                          // 413113
+	XORL R11, (R11)                         // 45311b
+	XORL DX, DX                             // 31d2 or 33d2
+	XORL R11, DX                            // 4431da or 4133d3
+	XORL DX, R11                            // 4131d3 or 4433da
+	XORL R11, R11                           // 4531db or 4533db
+	XORQ $-249346713, (BX)                  // 488133674523f1
+	XORQ $-249346713, (R11)                 // 498133674523f1
+	XORQ $-249346713, DX                    // 4881f2674523f1
+	XORQ $-249346713, R11                   // 4981f3674523f1
+	XORQ $7, (BX)                           // 48833307
+	XORQ $7, (R11)                          // 49833307
+	XORQ $7, DX                             // 4883f207
+	XORQ $7, R11                            // 4983f307
+	XORQ DX, (BX)                           // 483113
+	XORQ R11, (BX)                          // 4c311b
+	XORQ DX, (R11)                          // 493113
+	XORQ R11, (R11)                         // 4d311b
+	XORQ DX, DX                             // 4831d2 or 4833d2
+	XORQ R11, DX                            // 4c31da or 4933d3
+	XORQ DX, R11                            // 4931d3 or 4c33da
+	XORQ R11, R11                           // 4d31db or 4d33db
+	XORB $7, (BX)                           // 803307
+	XORB $7, (R11)                          // 41803307
+	XORB $7, DL                             // 80f207
+	XORB $7, R11                            // 4180f307
+	XORB DL, (BX)                           // 3013
+	XORB R11, (BX)                          // 44301b
+	XORB DL, (R11)                          // 413013
+	XORB R11, (R11)                         // 45301b
+	XORB DL, DL                             // 30d2 or 32d2
+	XORB R11, DL                            // 4430da or 4132d3
+	XORB DL, R11                            // 4130d3 or 4432da
+	XORB R11, R11                           // 4530db or 4532db
+	XORW (BX), DX                           // 663313
+	XORW (R11), DX                          // 66413313
+	XORW (BX), R11                          // 6644331b
+	XORW (R11), R11                         // 6645331b
+	XORL (BX), DX                           // 3313
+	XORL (R11), DX                          // 413313
+	XORL (BX), R11                          // 44331b
+	XORL (R11), R11                         // 45331b
+	XORQ (BX), DX                           // 483313
+	XORQ (R11), DX                          // 493313
+	XORQ (BX), R11                          // 4c331b
+	XORQ (R11), R11                         // 4d331b
+	XORB (BX), DL                           // 3213
+	XORB (R11), DL                          // 413213
+	XORB (BX), R11                          // 44321b
+	XORB (R11), R11                         // 45321b
+	XORPD (BX), X2                          // 660f5713
+	XORPD (R11), X2                         // 66410f5713
+	XORPD X2, X2                            // 660f57d2
+	XORPD X11, X2                           // 66410f57d3
+	XORPD (BX), X11                         // 66440f571b
+	XORPD (R11), X11                        // 66450f571b
+	XORPD X2, X11                           // 66440f57da
+	XORPD X11, X11                          // 66450f57db
+	XORPS (BX), X2                          // 0f5713
+	XORPS (R11), X2                         // 410f5713
+	XORPS X2, X2                            // 0f57d2
+	XORPS X11, X2                           // 410f57d3
+	XORPS (BX), X11                         // 440f571b
+	XORPS (R11), X11                        // 450f571b
+	XORPS X2, X11                           // 440f57da
+	XORPS X11, X11                          // 450f57db
+	//TODO: XRSTOR (BX)                     // 0fae2b
+	//TODO: XRSTOR (R11)                    // 410fae2b
+	//TODO: XRSTOR64 (BX)                   // 480fae2b
+	//TODO: XRSTOR64 (R11)                  // 490fae2b
+	//TODO: XRSTORS (BX)                    // 0fc71b
+	//TODO: XRSTORS (R11)                   // 410fc71b
+	//TODO: XRSTORS64 (BX)                  // 480fc71b
+	//TODO: XRSTORS64 (R11)                 // 490fc71b
+	//TODO: XSAVE (BX)                      // 0fae23
+	//TODO: XSAVE (R11)                     // 410fae23
+	//TODO: XSAVE64 (BX)                    // 480fae23
+	//TODO: XSAVE64 (R11)                   // 490fae23
+	//TODO: XSAVEC (BX)                     // 0fc723
+	//TODO: XSAVEC (R11)                    // 410fc723
+	//TODO: XSAVEC64 (BX)                   // 480fc723
+	//TODO: XSAVEC64 (R11)                  // 490fc723
+	//TODO: XSAVEOPT (BX)                   // 0fae33
+	//TODO: XSAVEOPT (R11)                  // 410fae33
+	//TODO: XSAVEOPT64 (BX)                 // 480fae33
+	//TODO: XSAVEOPT64 (R11)                // 490fae33
+	//TODO: XSAVES (BX)                     // 0fc72b
+	//TODO: XSAVES (R11)                    // 410fc72b
+	//TODO: XSAVES64 (BX)                   // 480fc72b
+	//TODO: XSAVES64 (R11)                  // 490fc72b
+	//TODO: XSETBV                          // 0f01d1
+	XTEST                                   // 0f01d6
+	RET
diff --git a/src/cmd/asm/internal/asm/testdata/amd64error.s b/src/cmd/asm/internal/asm/testdata/amd64error.s
new file mode 100644
index 0000000..9895b54
--- /dev/null
+++ b/src/cmd/asm/internal/asm/testdata/amd64error.s
@@ -0,0 +1,7 @@
+// Copyright 2016 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.
+
+TEXT errors(SB),$0
+	MOVL	foo<>(SB)(AX), AX // ERROR "invalid instruction"
+	RET
diff --git a/src/cmd/asm/internal/asm/testdata/arm.out b/src/cmd/asm/internal/asm/testdata/arm.out
deleted file mode 100644
index 7d79bf3..0000000
--- a/src/cmd/asm/internal/asm/testdata/arm.out
+++ /dev/null
@@ -1,60 +0,0 @@
-9 00001 (testdata/arm.s:9)	TEXT	foo(SB), 0, $0
-18 00002 (testdata/arm.s:18)	ADD	$1, R2, R3
-19 00003 (testdata/arm.s:19)	ADD	R1<<R2, R3, R4
-20 00004 (testdata/arm.s:20)	ADD	R1>>R2, R3, R4
-21 00005 (testdata/arm.s:21)	ADD	R1@>R2, R3, R4
-22 00006 (testdata/arm.s:22)	ADD	R1->R2, R3, R4
-23 00007 (testdata/arm.s:23)	ADD	R1, R2, R3
-24 00008 (testdata/arm.s:24)	ADD	R1<<R2, R3, R4
-34 00009 (testdata/arm.s:34)	ADD	$1, R2
-35 00010 (testdata/arm.s:35)	ADD	R1<<R2, R3
-36 00011 (testdata/arm.s:36)	ADD	R1>>R2, R3
-37 00012 (testdata/arm.s:37)	ADD	R1@>R2, R3
-38 00013 (testdata/arm.s:38)	ADD	R1->R2, R3
-39 00014 (testdata/arm.s:39)	ADD	R1, R2
-48 00015 (testdata/arm.s:48)	CLZ.S	R1, R2
-57 00016 (testdata/arm.s:57)	MOVW.S	R1, R2
-58 00017 (testdata/arm.s:58)	MOVW.S	$1, R2
-59 00018 (testdata/arm.s:59)	MOVW.S	R1<<R2, R3
-68 00019 (testdata/arm.s:68)	JMP.S	20(PC)
-74 00020 (testdata/arm.s:74)	JMP.S	(R2)
-75 00021 (testdata/arm.s:75)	JMP.S	foo(SB)
-76 00022 (testdata/arm.s:76)	JMP.S	bar<>(SB)
-85 00023 (testdata/arm.s:85)	BX	(R2)
-94 00024 (testdata/arm.s:94)	BEQ	25(PC)
-103 00025 (testdata/arm.s:103)	SWI.S	R1
-104 00026 (testdata/arm.s:104)	SWI.S	(R1)
-105 00027 (testdata/arm.s:105)	SWI.S	foo(SB)
-114 00028 (testdata/arm.s:114)	CMP.S	$1, R2
-115 00029 (testdata/arm.s:115)	CMP.S	R1<<R2, R3
-116 00030 (testdata/arm.s:116)	CMP.S	R1, R2
-130 00031 (testdata/arm.s:130)	MOVM	(R1), [R2,R5,R8,g]
-131 00032 (testdata/arm.s:131)	MOVM	(R1), [R2,R3,R4,R5]
-132 00033 (testdata/arm.s:132)	MOVM.S	(R1), [R2]
-143 00034 (testdata/arm.s:143)	MOVM	[R2,R5,R8,g], (R1)
-144 00035 (testdata/arm.s:144)	MOVM	[R2,R3,R4,R5], (R1)
-145 00036 (testdata/arm.s:145)	MOVM.S	[R2], (R1)
-154 00037 (testdata/arm.s:154)	STREX.S	(R2), R1, R3
-160 00038 (testdata/arm.s:160)	STREX.S	(R2), R1, R1
-166 00039 (testdata/arm.s:166)	STREX.S	(R2), R3, R3
-175 00040 (testdata/arm.s:175)	WORD	$1234
-184 00041 (testdata/arm.s:184)	ABSF.S	F1, F2
-190 00042 (testdata/arm.s:190)	ADDD.S	F1, F2
-191 00043 (testdata/arm.s:191)	ADDD.S	$(0.5), F2
-197 00044 (testdata/arm.s:197)	ADDD.S	F1, F2, F3
-198 00045 (testdata/arm.s:198)	ADDD.S	$(0.5), F2, F3
-204 00046 (testdata/arm.s:204)	CMPD.S	F1, F2
-228 00047 (testdata/arm.s:228)	MRC	$8301712627
-229 00048 (testdata/arm.s:229)	MRC	$8300664051
-238 00049 (testdata/arm.s:238)	MULL	R1, R2, (R3, R4)
-250 00050 (testdata/arm.s:250)	MULAWT	R1, R2, R3, R4
-258 00051 (testdata/arm.s:258)	PLD	(R1)
-259 00052 (testdata/arm.s:259)	PLD	4(R1)
-268 00053 (testdata/arm.s:268)	RET
-272 00054 (testdata/arm.s:272)	JMP	foo(SB)
-273 00055 (testdata/arm.s:273)	CALL	foo(SB)
-274 00056 (testdata/arm.s:274)	JMP	foo(SB)
-275 00057 (testdata/arm.s:275)	CALL	foo(SB)
-278 00058 (testdata/arm.s:278)	CMPF	F1, F2
-279 00059 (testdata/arm.s:279)	CMPD	F1, F2
-288 00060 (testdata/arm.s:288)	END
diff --git a/src/cmd/asm/internal/asm/testdata/arm.s b/src/cmd/asm/internal/asm/testdata/arm.s
index f5ba3a8..8062750 100644
--- a/src/cmd/asm/internal/asm/testdata/arm.s
+++ b/src/cmd/asm/internal/asm/testdata/arm.s
@@ -6,7 +6,7 @@
 // the old assembler's (5a's) grammar and hand-writing complete
 // instructions for each rule, to guarantee we cover the same space.
 
-TEXT	foo(SB), 0, $0
+TEXT	foo(SB), 7, $0
 
 // ADD
 //
@@ -21,7 +21,7 @@ TEXT	foo(SB), 0, $0
 	ADD	R1@>R2, R3, R4
 	ADD	R1->R2, R3, R4
 	ADD	R1, R2, R3
-	ADD	R(1)<<R(2), R(3), R(4)
+	ADD	R(1)<<R(2), R(3), R(4) // ADD	R1<<R2, R3, R4
 
 //	LTYPE1 cond imsr ',' spreg ',' // asm doesn't support trailing comma.
 //	{
@@ -65,15 +65,16 @@ TEXT	foo(SB), 0, $0
 //	{
 //		outcode($1, $2, &nullgen, 0, &$4);
 //	}
-	B.S	1(PC)
+	B.EQ	1(PC) // BEQ 1(PC)
 
 //	LTYPE4 cond comma nireg
 //	{
 //		outcode($1, $2, &nullgen, 0, &$4);
 //	}
-	B.S	(R2)
-	B.S	foo(SB)
-	B.S	bar<>(SB)
+	BEQ	2(PC)
+	B	foo(SB) // JMP foo(SB)
+	BEQ	2(PC)
+	B	bar<>(SB) // JMP bar<>(SB)
 
 //
 // BX
@@ -82,7 +83,7 @@ TEXT	foo(SB), 0, $0
 //	{
 //		outcode($1, Always, &nullgen, 0, &$3);
 //	}
-	BX	(R2)
+	BX	(R0)
 
 //
 // BEQ
@@ -100,9 +101,9 @@ TEXT	foo(SB), 0, $0
 //	{
 //		outcode($1, $2, &nullgen, 0, &$4);
 //	}
-	SWI.S	R1
+	SWI.S	$2
 	SWI.S	(R1)
-	SWI.S	foo(SB)
+//	SWI.S	foo(SB) - TODO: classifying foo(SB) as C_TLS_LE
 
 //
 // CMP
@@ -127,8 +128,8 @@ TEXT	foo(SB), 0, $0
 //		g.Offset = int64($6);
 //		outcode($1, $2, &$3, 0, &g);
 //	}
-	MOVM	0(R1), [R2,R5,R8,g]
-	MOVM	0(R1), [R2-R5]
+	MOVM	0(R1), [R2,R5,R8,g] // MOVM	(R1), [R2,R5,R8,g]
+	MOVM	(R1), [R2-R5] // MOVM (R1), [R2,R3,R4,R5]
 	MOVM.S	(R1), [R2]
 
 //	LTYPE8 cond '[' reglist ']' ',' ioreg
@@ -140,8 +141,8 @@ TEXT	foo(SB), 0, $0
 //		g.Offset = int64($4);
 //		outcode($1, $2, &g, 0, &$7);
 //	}
-	MOVM	[R2,R5,R8,g], 0(R1)
-	MOVM	[R2-R5], 0(R1)
+	MOVM	[R2,R5,R8,g], 0(R1) // MOVM	[R2,R5,R8,g], (R1)
+	MOVM	[R2-R5], (R1) // MOVM [R2,R3,R4,R5], (R1)
 	MOVM.S	[R2], (R1)
 
 //
@@ -151,19 +152,19 @@ TEXT	foo(SB), 0, $0
 //	{
 //		outcode($1, $2, &$5, int32($3.Reg), &$7);
 //	}
-	STREX.S	R1, (R2), R3
+	STREX.S	R1, (R2), R3 // STREX.S (R2), R1, R3
 
 //	LTYPE9 cond reg ',' ireg
 //	{
 //		outcode($1, $2, &$5, int32($3.Reg), &$3);
 //	}
-	STREX.S	R1, (R2)
+	STREX.S	R1, (R2) // STREX.S (R2), R1, R1
 
 //	LTYPE9 cond comma ireg ',' reg
 //	{
 //		outcode($1, $2, &$4, int32($6.Reg), &$6);
 //	}
-	STREX.S	(R2), R3
+	STREX.S	(R2), R3 // STREX.S (R2), R3, R3
 
 //
 // word
@@ -188,14 +189,13 @@ TEXT	foo(SB), 0, $0
 //		outcode($1, $2, &$3, 0, &$5);
 //	}
 	ADDD.S	F1, F2
-	ADDD.S	$0.5, F2
+	MOVF	$0.5, F2 // MOVF $(0.5), F2
 
 //	LTYPEK cond frcon ',' LFREG ',' freg
 //	{
 //		outcode($1, $2, &$3, $5, &$7);
 //	}
 	ADDD.S	F1, F2, F3
-	ADDD.S	$0.5, F2, F3
 
 //	LTYPEL cond freg ',' freg
 //	{
@@ -225,8 +225,8 @@ TEXT	foo(SB), 0, $0
 //			(1<<4));			/* must be set */
 //		outcode(AMRC, Always, &nullgen, 0, &g);
 //	}
-	MRC.S	4, 6, R1, C2, C3, 7
-	MCR.S	4, 6, R1, C2, C3, 7
+	MRC.S	4, 6, R1, C2, C3, 7 // MRC $8301712627
+	MCR.S	4, 6, R1, C2, C3, 7 // MRC $8300664051
 
 //
 // MULL r1,r2,(hi,lo)
@@ -265,12 +265,15 @@ TEXT	foo(SB), 0, $0
 //	{
 //		outcode($1, $2, &nullgen, 0, &nullgen);
 //	}
+	BEQ	2(PC)
 	RET
 
 // More B/BL cases, and canonical names JMP, CALL.
 
-	B	foo(SB)
-	BL	foo(SB)
+	BEQ	2(PC)
+	B	foo(SB) // JMP foo(SB)
+	BL	foo(SB) // CALL foo(SB)
+	BEQ	2(PC)
 	JMP	foo(SB)
 	CALL	foo(SB)
 
diff --git a/src/cmd/asm/internal/asm/testdata/arm64.out b/src/cmd/asm/internal/asm/testdata/arm64.out
deleted file mode 100644
index 37944bc..0000000
--- a/src/cmd/asm/internal/asm/testdata/arm64.out
+++ /dev/null
@@ -1,55 +0,0 @@
-9 00001 (testdata/arm64.s:9)	TEXT	foo(SB), 7, $-8
-20 00002 (testdata/arm64.s:20)	ADDW	$1, R2, R3
-21 00003 (testdata/arm64.s:21)	ADDW	R1, R2, R3
-22 00004 (testdata/arm64.s:22)	ADDW	R1, ZR, R3
-23 00005 (testdata/arm64.s:23)	ADD	$1, R2, R3
-24 00006 (testdata/arm64.s:24)	ADD	R1, R2, R3
-25 00007 (testdata/arm64.s:25)	ADD	R1, ZR, R3
-26 00008 (testdata/arm64.s:26)	ADD	$1, R2, R3
-36 00009 (testdata/arm64.s:36)	ADDW	$1, R2
-37 00010 (testdata/arm64.s:37)	ADDW	R1, R2
-38 00011 (testdata/arm64.s:38)	ADD	$1, R2
-39 00012 (testdata/arm64.s:39)	ADD	R1, R2
-48 00013 (testdata/arm64.s:48)	CLSW	R1, R2
-49 00014 (testdata/arm64.s:49)	CLS	R1, R2
-58 00015 (testdata/arm64.s:58)	MOVW	R1, R2
-59 00016 (testdata/arm64.s:59)	MOVW	ZR, R1
-60 00017 (testdata/arm64.s:60)	MOVW	R1, ZR
-61 00018 (testdata/arm64.s:61)	MOVW	$1, ZR
-62 00019 (testdata/arm64.s:62)	MOVW	$1, R1
-63 00020 (testdata/arm64.s:63)	MOVW	ZR, (R1)
-64 00021 (testdata/arm64.s:64)	MOVD	R1, R2
-65 00022 (testdata/arm64.s:65)	MOVD	ZR, R1
-66 00023 (testdata/arm64.s:66)	MOVD	$1, ZR
-67 00024 (testdata/arm64.s:67)	MOVD	$1, R1
-68 00025 (testdata/arm64.s:68)	MOVD	ZR, (R1)
-77 00026 (testdata/arm64.s:77)	MOVK	$1, R1
-86 00027 (testdata/arm64.s:86)	CALL	28(PC)
-92 00028 (testdata/arm64.s:92)	CALL	(R2)
-93 00029 (testdata/arm64.s:93)	CALL	foo(SB)
-94 00030 (testdata/arm64.s:94)	CALL	bar<>(SB)
-102 00031 (testdata/arm64.s:102)	BEQ	32(PC)
-110 00032 (testdata/arm64.s:110)	SVC
-119 00033 (testdata/arm64.s:119)	CMP	$3, R2
-120 00034 (testdata/arm64.s:120)	CMP	R1, R2
-130 00035 (testdata/arm64.s:130)	CBZ	R1
-139 00036 (testdata/arm64.s:139)	CSET	GT, R1
-147 00037 (testdata/arm64.s:147)	CSEL	LT, R1, R2, ZR
-148 00038 (testdata/arm64.s:148)	CSINC	GT, R1, ZR, R3
-149 00039 (testdata/arm64.s:149)	CSNEG	MI, R1, R2, R3
-150 00040 (testdata/arm64.s:150)	CSINV	HS, R1, R2, R3
-156 00041 (testdata/arm64.s:156)	CSEL	LT, R1, R2
-164 00042 (testdata/arm64.s:164)	CCMN	MI, ZR, R1, $4
-173 00043 (testdata/arm64.s:173)	FADDD	$(0.5), F1
-174 00044 (testdata/arm64.s:174)	FADDD	F1, F2
-180 00045 (testdata/arm64.s:180)	FADDD	$(0.69999999999999996), F1, F2
-181 00046 (testdata/arm64.s:181)	FADDD	F1, F2, F3
-233 00047 (testdata/arm64.s:233)	DMB	$1
-242 00048 (testdata/arm64.s:242)	LDAXRW	(R0), R2
-243 00049 (testdata/arm64.s:243)	STLXRW	R1, (R0), R3
-251 00050 (testdata/arm64.s:251)	RET
-255 00051 (testdata/arm64.s:255)	JMP	foo(SB)
-256 00052 (testdata/arm64.s:256)	CALL	foo(SB)
-257 00053 (testdata/arm64.s:257)	JMP	foo(SB)
-258 00054 (testdata/arm64.s:258)	CALL	foo(SB)
-266 00055 (testdata/arm64.s:266)	END
diff --git a/src/cmd/asm/internal/asm/testdata/arm64.s b/src/cmd/asm/internal/asm/testdata/arm64.s
index 2c8720b..22d4306 100644
--- a/src/cmd/asm/internal/asm/testdata/arm64.s
+++ b/src/cmd/asm/internal/asm/testdata/arm64.s
@@ -83,15 +83,15 @@ TEXT	foo(SB), 7, $-8
 //	{
 //		outcode($1, &nullgen, NREG, &$3);
 //	}
-	BL	1(PC)
+	BL	1(PC) // CALL 1(PC)
 
 //		LTYPE4 comma nireg
 //	{
 //		outcode($1, &nullgen, NREG, &$3);
 //	}
-	BL	(R2)
-	BL	foo(SB)
-	BL	bar<>(SB)
+	BL	(R2) // CALL (R2)
+	BL	foo(SB) // CALL foo(SB)
+	BL	bar<>(SB) // CALL bar<>(SB)
 //
 // BEQ
 //
@@ -127,7 +127,7 @@ TEXT	foo(SB), 7, $-8
 //		outcode($1, &$2, NREG, &$4);
 //	}
 again:
-	CBZ	R1, again
+	CBZ	R1, again // CBZ R1
 
 //
 // CSET
@@ -147,7 +147,7 @@ again:
 	CSEL	LT, R1, R2, ZR
 	CSINC	GT, R1, ZR, R3
 	CSNEG	MI, R1, R2, R3
-	CSINV	CS, R1, R2, R3
+	CSINV	CS, R1, R2, R3 // CSINV HS, R1, R2, R3
 
 //		LTYPES cond ',' reg ',' reg
 //	{
@@ -170,14 +170,14 @@ again:
 //	{
 //		outcode($1, &$2, NREG, &$4);
 //	}
-	FADDD	$0.5, F1
+	FADDD	$0.5, F1 // FADDD $(0.5), F1
 	FADDD	F1, F2
 
 //		LTYPEK frcon ',' freg ',' freg
 //	{
 //		outcode($1, &$2, $4.reg, &$6);
 //	}
-	FADDD	$0.7, F1, F2
+	FADDD	$0.7, F1, F2 // FADDD	$(0.69999999999999996), F1, F2
 	FADDD	F1, F2, F3
 
 //
@@ -248,12 +248,15 @@ again:
 //	{
 //		outcode($1, &nullgen, NREG, &nullgen);
 //	}
+	BEQ	2(PC)
 	RET
 
 // More B/BL cases, and canonical names JMP, CALL.
 
-	B	foo(SB)
-	BL	foo(SB)
+	BEQ	2(PC)
+	B	foo(SB) // JMP foo(SB)
+	BL	foo(SB) // CALL foo(SB)
+	BEQ	2(PC)
 	JMP	foo(SB)
 	CALL	foo(SB)
 
diff --git a/src/cmd/asm/internal/asm/testdata/mips64.out b/src/cmd/asm/internal/asm/testdata/mips64.out
deleted file mode 100644
index 9263a7b..0000000
--- a/src/cmd/asm/internal/asm/testdata/mips64.out
+++ /dev/null
@@ -1,99 +0,0 @@
-8 00001 (testdata/mips64.s:8)	TEXT	foo(SB), 0, $0
-18 00002 (testdata/mips64.s:18)	MOVW	R1, R2
-19 00003 (testdata/mips64.s:19)	MOVW	LO, R1
-20 00004 (testdata/mips64.s:20)	MOVW	HI, R1
-21 00005 (testdata/mips64.s:21)	MOVW	R1, LO
-22 00006 (testdata/mips64.s:22)	MOVW	R1, HI
-23 00007 (testdata/mips64.s:23)	MOVV	R1, R2
-24 00008 (testdata/mips64.s:24)	MOVV	LO, R1
-25 00009 (testdata/mips64.s:25)	MOVV	HI, R1
-26 00010 (testdata/mips64.s:26)	MOVV	R1, LO
-27 00011 (testdata/mips64.s:27)	MOVV	R1, HI
-33 00012 (testdata/mips64.s:33)	MOVW	foo<>+3(SB), R2
-34 00013 (testdata/mips64.s:34)	MOVW	16(R1), R2
-35 00014 (testdata/mips64.s:35)	MOVW	(R1), R2
-36 00015 (testdata/mips64.s:36)	MOVV	foo<>+3(SB), R2
-37 00016 (testdata/mips64.s:37)	MOVV	16(R1), R2
-38 00017 (testdata/mips64.s:38)	MOVV	(R1), R2
-44 00018 (testdata/mips64.s:44)	MOVB	R1, R2
-50 00019 (testdata/mips64.s:50)	MOVB	foo<>+3(SB), R2
-51 00020 (testdata/mips64.s:51)	MOVB	16(R1), R2
-52 00021 (testdata/mips64.s:52)	MOVB	(R1), R2
-61 00022 (testdata/mips64.s:61)	MOVD	foo<>+3(SB), F2
-62 00023 (testdata/mips64.s:62)	MOVD	16(R1), F2
-63 00024 (testdata/mips64.s:63)	MOVD	(R1), F2
-69 00025 (testdata/mips64.s:69)	MOVD	$(0.10000000000000001), F2
-75 00026 (testdata/mips64.s:75)	MOVD	F1, F2
-81 00027 (testdata/mips64.s:81)	MOVD	F2, foo<>+3(SB)
-82 00028 (testdata/mips64.s:82)	MOVD	F2, 16(R1)
-83 00029 (testdata/mips64.s:83)	MOVD	F2, (R1)
-92 00030 (testdata/mips64.s:92)	MOVW	R1, foo<>+3(SB)
-93 00031 (testdata/mips64.s:93)	MOVW	R1, 16(R2)
-94 00032 (testdata/mips64.s:94)	MOVW	R1, (R2)
-95 00033 (testdata/mips64.s:95)	MOVV	R1, foo<>+3(SB)
-96 00034 (testdata/mips64.s:96)	MOVV	R1, 16(R2)
-97 00035 (testdata/mips64.s:97)	MOVV	R1, (R2)
-103 00036 (testdata/mips64.s:103)	MOVB	R1, foo<>+3(SB)
-104 00037 (testdata/mips64.s:104)	MOVB	R1, 16(R2)
-105 00038 (testdata/mips64.s:105)	MOVB	R1, (R2)
-114 00039 (testdata/mips64.s:114)	MOVD	F1, foo<>+3(SB)
-115 00040 (testdata/mips64.s:115)	MOVD	F1, 16(R2)
-116 00041 (testdata/mips64.s:116)	MOVD	F1, (R2)
-125 00042 (testdata/mips64.s:125)	MOVW	FCR0, R1
-131 00043 (testdata/mips64.s:131)	MOVW	R1, FCR0
-137 00044 (testdata/mips64.s:137)	MOVW	R1, M1
-138 00045 (testdata/mips64.s:138)	MOVV	R1, M1
-144 00046 (testdata/mips64.s:144)	MOVW	M1, R1
-145 00047 (testdata/mips64.s:145)	MOVV	M1, R1
-158 00048 (testdata/mips64.s:158)	ADD	R1, R2, R3
-164 00049 (testdata/mips64.s:164)	ADD	$1, R2, R3
-170 00050 (testdata/mips64.s:170)	ADD	R1, R2
-176 00051 (testdata/mips64.s:176)	ADD	$4, R1
-182 00052 (testdata/mips64.s:182)	MUL	R1, R2
-188 00053 (testdata/mips64.s:188)	SLL	R1, R2, R3
-194 00054 (testdata/mips64.s:194)	SLL	R1, R2
-200 00055 (testdata/mips64.s:200)	SLL	$4, R1, R2
-206 00056 (testdata/mips64.s:206)	SLL	$4, R1
-215 00057 (testdata/mips64.s:215)	MOVW	$1, R1
-216 00058 (testdata/mips64.s:216)	MOVV	$1, R1
-222 00059 (testdata/mips64.s:222)	MOVW	$1, R1
-223 00060 (testdata/mips64.s:223)	MOVW	$foo(SB), R1
-224 00061 (testdata/mips64.s:224)	MOVV	$1, R1
-225 00062 (testdata/mips64.s:225)	MOVV	$foo(SB), R1
-236 00063 (testdata/mips64.s:236)	JMP	64(PC)
-237 00064 (testdata/mips64.s:237)	JMP	63
-238 00065 (testdata/mips64.s:238)	CALL	66(PC)
-239 00066 (testdata/mips64.s:239)	CALL	63
-245 00067 (testdata/mips64.s:245)	JMP	4(R1)
-246 00068 (testdata/mips64.s:246)	JMP	foo(SB)
-247 00069 (testdata/mips64.s:247)	CALL	4(R1)
-248 00070 (testdata/mips64.s:248)	CALL	foo(SB)
-258 00071 (testdata/mips64.s:258)	BEQ	R1, 72(PC)
-259 00072 (testdata/mips64.s:259)	BEQ	R1, 71
-266 00073 (testdata/mips64.s:266)	BEQ	R1, R2, 74(PC)
-267 00074 (testdata/mips64.s:267)	BEQ	R1, R2, 73
-277 00075 (testdata/mips64.s:277)	BLTZ	R1, 76(PC)
-278 00076 (testdata/mips64.s:278)	BLTZ	R1, 75
-285 00077 (testdata/mips64.s:285)	BFPT	78(PC)
-286 00078 (testdata/mips64.s:286)	BFPT	77
-296 00079 (testdata/mips64.s:296)	ABSD	F1, F2
-302 00080 (testdata/mips64.s:302)	ADDD	F1, F2
-308 00081 (testdata/mips64.s:308)	ADDD	F1, F2, F3
-314 00082 (testdata/mips64.s:314)	CMPEQD	F1, F2
-320 00083 (testdata/mips64.s:320)	WORD	$1
-321 00084 (testdata/mips64.s:321)	WORD	$foo(SB)
-330 00085 (testdata/mips64.s:330)	NOP
-336 00086 (testdata/mips64.s:336)	NOP	R2
-342 00087 (testdata/mips64.s:342)	NOP	F2
-348 00088 (testdata/mips64.s:348)	NOP	R2
-354 00089 (testdata/mips64.s:354)	NOP	F2
-360 00090 (testdata/mips64.s:360)	NOP	$4
-365 00091 (testdata/mips64.s:365)	SYSCALL
-366 00092 (testdata/mips64.s:366)	BREAK
-367 00093 (testdata/mips64.s:367)	BREAK	$1, (R1)
-376 00094 (testdata/mips64.s:376)	SYSCALL
-377 00095 (testdata/mips64.s:377)	RET
-382 00096 (testdata/mips64.s:382)	CALL	foo(SB)
-383 00097 (testdata/mips64.s:383)	JMP	foo(SB)
-384 00098 (testdata/mips64.s:384)	CALL	foo(SB)
-392 00099 (testdata/mips64.s:392)	END
diff --git a/src/cmd/asm/internal/asm/testdata/mips64.s b/src/cmd/asm/internal/asm/testdata/mips64.s
index 4112b4b..12330a2 100644
--- a/src/cmd/asm/internal/asm/testdata/mips64.s
+++ b/src/cmd/asm/internal/asm/testdata/mips64.s
@@ -5,7 +5,7 @@
 // This input was created by taking the ppc64 testcase and modified
 // by hand.
 
-TEXT foo(SB),0,$0
+TEXT foo(SB),7,$0
 
 //inst:
 //
@@ -66,7 +66,7 @@ TEXT foo(SB),0,$0
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
-	MOVD	$0.1, F2
+	MOVD	$0.1, F2 // MOVD $(0.10000000000000001), F2
 
 //	LFMOV freg ',' freg
 //	{
@@ -232,20 +232,28 @@ TEXT foo(SB),0,$0
 //	{
 //		outcode(int($1), &nullgen, 0, &$2);
 //	}
+	BEQ	R1, 2(PC)
 label0:
 	JMP	1(PC)
-	JMP	label0+0
-	JAL	1(PC)
-	JAL	label0+0
+	BEQ	R1, 2(PC)
+	JMP	label0+0 // JMP 64
+	BEQ	R1, 2(PC)
+	JAL	1(PC) // CALL 1(PC)
+	BEQ	R1, 2(PC)
+	JAL	label0+0 // CALL 64
 
 //	LBRA addr
 //	{
 //		outcode(int($1), &nullgen, 0, &$2);
 //	}
-	JMP	4(R1)
-	JMP	foo+0(SB)
-	JAL	4(R1)
-	JAL	foo+0(SB)
+	BEQ	R1, 2(PC)
+	JMP	0(R1) // JMP (R1)
+	BEQ	R1, 2(PC)
+	JMP	foo+0(SB) // JMP foo(SB)
+	BEQ	R1, 2(PC)
+	JAL	0(R1) // CALL (R1)
+	BEQ	R1, 2(PC)
+	JAL	foo+0(SB) // CALL foo(SB)
 
 //
 // BEQ/BNE
@@ -256,7 +264,7 @@ label0:
 //	}
 label1:
 	BEQ	R1, 1(PC)
-	BEQ	R1, label1
+	BEQ	R1, label1 // BEQ R1, 79
 
 //	LBRA rreg ',' sreg ',' rel
 //	{
@@ -264,7 +272,7 @@ label1:
 //	}
 label2:
 	BEQ	R1, R2, 1(PC)
-	BEQ	R1, R2, label2
+	BEQ	R1, R2, label2 // BEQ R1, R2, 81
 
 //
 // other integer conditional branch
@@ -275,7 +283,7 @@ label2:
 //	}
 label3:
 	BLTZ	R1, 1(PC)
-	BLTZ	R1, label3
+	BLTZ	R1, label3 // BLTZ R1, 83
 
 //
 // floating point conditional branch
@@ -283,7 +291,7 @@ label3:
 //	LBRA rel
 label4:
 	BFPT	1(PC)
-	BFPT	label4
+	BFPT	label4 // BFPT 85
 
 
 //
@@ -364,7 +372,8 @@ label4:
 //
 	SYSCALL
 	BREAK
-	BREAK	$1, (R1) // overloaded CACHE opcode
+	// overloaded cache opcode:
+	BREAK	R1, (R1)
 
 //
 // RET
@@ -374,12 +383,14 @@ label4:
 //		outcode(int($1), &nullgen, 0, &nullgen);
 //	}
 	SYSCALL
+	BEQ	R1, 2(PC)
 	RET
 
 
 // More JMP/JAL cases, and canonical names JMP, CALL.
 
-	JAL	foo(SB)
+	JAL	foo(SB) // CALL foo(SB)
+	BEQ	R1, 2(PC)
 	JMP	foo(SB)
 	CALL	foo(SB)
 
diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.out b/src/cmd/asm/internal/asm/testdata/ppc64.out
deleted file mode 100644
index 2a5d175..0000000
--- a/src/cmd/asm/internal/asm/testdata/ppc64.out
+++ /dev/null
@@ -1,114 +0,0 @@
-9 00001 (testdata/ppc64.s:9)	TEXT	foo(SB), 0, $0
-19 00002 (testdata/ppc64.s:19)	MOVW	R1, R2
-25 00003 (testdata/ppc64.s:25)	MOVW	foo<>+3(SB), R2
-26 00004 (testdata/ppc64.s:26)	MOVW	16(R1), R2
-32 00005 (testdata/ppc64.s:32)	MOVW	(R1), R2
-33 00006 (testdata/ppc64.s:33)	MOVW	(R1)(R2*1), R3
-39 00007 (testdata/ppc64.s:39)	MOVW	R1, R2
-45 00008 (testdata/ppc64.s:45)	MOVB	foo<>+3(SB), R2
-46 00009 (testdata/ppc64.s:46)	MOVB	16(R1), R2
-52 00010 (testdata/ppc64.s:52)	MOVB	(R1), R2
-53 00011 (testdata/ppc64.s:53)	MOVB	(R1)(R2*1), R3
-62 00012 (testdata/ppc64.s:62)	FMOVD	foo<>+3(SB), F2
-63 00013 (testdata/ppc64.s:63)	FMOVD	16(R1), F2
-69 00014 (testdata/ppc64.s:69)	FMOVD	(R1), F2
-75 00015 (testdata/ppc64.s:75)	FMOVD	$(0.10000000000000001), F2
-81 00016 (testdata/ppc64.s:81)	FMOVD	F1, F2
-87 00017 (testdata/ppc64.s:87)	FMOVD	F2, foo<>+3(SB)
-88 00018 (testdata/ppc64.s:88)	FMOVD	F2, 16(R1)
-94 00019 (testdata/ppc64.s:94)	FMOVD	F2, (R1)
-103 00020 (testdata/ppc64.s:103)	MOVW	R1, foo<>+3(SB)
-104 00021 (testdata/ppc64.s:104)	MOVW	R1, 16(R2)
-110 00022 (testdata/ppc64.s:110)	MOVW	R1, (R1)
-111 00023 (testdata/ppc64.s:111)	MOVW	R1, (R2)(R3*1)
-117 00024 (testdata/ppc64.s:117)	MOVB	R1, foo<>+3(SB)
-118 00025 (testdata/ppc64.s:118)	MOVB	R1, 16(R2)
-124 00026 (testdata/ppc64.s:124)	MOVB	R1, (R1)
-125 00027 (testdata/ppc64.s:125)	MOVB	R1, (R2)(R3*1)
-133 00028 (testdata/ppc64.s:133)	FMOVD	F1, foo<>+3(SB)
-134 00029 (testdata/ppc64.s:134)	FMOVD	F1, 16(R2)
-140 00030 (testdata/ppc64.s:140)	FMOVD	F1, (R1)
-149 00031 (testdata/ppc64.s:149)	MOVFL	FPSCR, F1
-155 00032 (testdata/ppc64.s:155)	MOVFL	F1, FPSCR
-161 00033 (testdata/ppc64.s:161)	MOVFL	F1, $4, FPSCR
-167 00034 (testdata/ppc64.s:167)	MOVFL	FPSCR, CR0
-188 00035 (testdata/ppc64.s:188)	MOVW	R1, CR1
-194 00036 (testdata/ppc64.s:194)	MOVW	R1, CR
-206 00037 (testdata/ppc64.s:206)	ADD	R1, R2, R3
-212 00038 (testdata/ppc64.s:212)	ADD	$1, R2, R3
-224 00039 (testdata/ppc64.s:224)	ADD	R1, R2
-230 00040 (testdata/ppc64.s:230)	ADD	$4, R1
-236 00041 (testdata/ppc64.s:236)	ADDE	R1, R2, R3
-242 00042 (testdata/ppc64.s:242)	ADDE	R1, R2
-248 00043 (testdata/ppc64.s:248)	SLW	R1, R2, R3
-254 00044 (testdata/ppc64.s:254)	SLW	R1, R2
-260 00045 (testdata/ppc64.s:260)	SLW	$4, R1, R2
-266 00046 (testdata/ppc64.s:266)	SLW	$4, R1
-272 00047 (testdata/ppc64.s:272)	SLW	$4, R1
-278 00048 (testdata/ppc64.s:278)	SUBME	R1, R1
-296 00049 (testdata/ppc64.s:296)	MOVW	$1, R1
-302 00050 (testdata/ppc64.s:302)	MOVW	$1, R1
-303 00051 (testdata/ppc64.s:303)	MOVW	$foo(SB), R1
-327 00052 (testdata/ppc64.s:327)	MOVFL	CR0, CR1
-339 00053 (testdata/ppc64.s:339)	MOVW	CR, R1
-345 00054 (testdata/ppc64.s:345)	MOVW	SPR(0), R1
-346 00055 (testdata/ppc64.s:346)	MOVW	SPR(7), R1
-352 00056 (testdata/ppc64.s:352)	MOVW	LR, R1
-353 00057 (testdata/ppc64.s:353)	MOVW	CTR, R1
-359 00058 (testdata/ppc64.s:359)	MOVW	R1, LR
-360 00059 (testdata/ppc64.s:360)	MOVW	R1, CTR
-372 00060 (testdata/ppc64.s:372)	MOVW	R1, SPR(7)
-384 00061 (testdata/ppc64.s:384)	JMP	62(PC)
-385 00062 (testdata/ppc64.s:385)	JMP	61
-391 00063 (testdata/ppc64.s:391)	JMP	4(R1)
-392 00064 (testdata/ppc64.s:392)	JMP	foo(SB)
-398 00065 (testdata/ppc64.s:398)	JMP	CTR
-417 00066 (testdata/ppc64.s:417)	BEQ	CR1, 67(PC)
-418 00067 (testdata/ppc64.s:418)	BEQ	CR1, 66
-444 00068 (testdata/ppc64.s:444)	BC	4, CTR
-454 00069 (testdata/ppc64.s:454)	BC	$3, R4, 66
-474 00070 (testdata/ppc64.s:474)	BC	$3, R3, LR
-504 00071 (testdata/ppc64.s:504)	FABS	F1, F2
-510 00072 (testdata/ppc64.s:510)	FADD	F1, F2
-516 00073 (testdata/ppc64.s:516)	FADD	F1, F2, F3
-522 00074 (testdata/ppc64.s:522)	FMADD	F1, F2, F3, F4
-528 00075 (testdata/ppc64.s:528)	FCMPU	F1, F2
-534 00076 (testdata/ppc64.s:534)	FCMPU	F1, F2, CR0
-543 00077 (testdata/ppc64.s:543)	CMP	R1, R2
-549 00078 (testdata/ppc64.s:549)	CMP	R1, $4
-555 00079 (testdata/ppc64.s:555)	CMP	R1, CR0, R2
-561 00080 (testdata/ppc64.s:561)	CMP	R1, CR0, $4
-570 00081 (testdata/ppc64.s:570)	RLDC	$4, R1, $5, R2
-576 00082 (testdata/ppc64.s:576)	RLDC	$26, R1, $201326592, R2
-582 00083 (testdata/ppc64.s:582)	RLDC	R1, R2, $4, R3
-588 00084 (testdata/ppc64.s:588)	RLWMI	R1, R2, $201326592, R3
-597 00085 (testdata/ppc64.s:597)	MOVMW	foo(SB), R2
-598 00086 (testdata/ppc64.s:598)	MOVMW	4(R1), R2
-604 00087 (testdata/ppc64.s:604)	MOVMW	R1, foo(SB)
-605 00088 (testdata/ppc64.s:605)	MOVMW	R1, 4(R2)
-615 00089 (testdata/ppc64.s:615)	LSW	(R1), R2
-616 00090 (testdata/ppc64.s:616)	LSW	(R1)(R2*1), R3
-622 00091 (testdata/ppc64.s:622)	LSW	(R1), $1, R2
-623 00092 (testdata/ppc64.s:623)	LSW	(R1)(R2*1), $1, R3
-629 00093 (testdata/ppc64.s:629)	STSW	R1, (R2)
-630 00094 (testdata/ppc64.s:630)	STSW	R1, (R2)(R3*1)
-636 00095 (testdata/ppc64.s:636)	STSW	R1, $1, (R2)
-637 00096 (testdata/ppc64.s:637)	STSW	R1, $1, (R2)(R3*1)
-643 00097 (testdata/ppc64.s:643)	MOVHBR	(R1), R2
-644 00098 (testdata/ppc64.s:644)	MOVHBR	(R1)(R2*1), R3
-650 00099 (testdata/ppc64.s:650)	MOVHBR	R1, (R2)
-651 00100 (testdata/ppc64.s:651)	MOVHBR	R1, (R2)(R3*1)
-657 00101 (testdata/ppc64.s:657)	DCBF	(R1)
-658 00102 (testdata/ppc64.s:658)	DCBF	(R1)(R2*1)
-667 00103 (testdata/ppc64.s:667)	NOP
-673 00104 (testdata/ppc64.s:673)	NOP	R2
-679 00105 (testdata/ppc64.s:679)	NOP	F2
-685 00106 (testdata/ppc64.s:685)	NOP	R2
-691 00107 (testdata/ppc64.s:691)	NOP	F2
-697 00108 (testdata/ppc64.s:697)	NOP	$4
-705 00109 (testdata/ppc64.s:705)	RET
-709 00110 (testdata/ppc64.s:709)	JMP	foo(SB)
-710 00111 (testdata/ppc64.s:710)	CALL	foo(SB)
-711 00112 (testdata/ppc64.s:711)	JMP	foo(SB)
-712 00113 (testdata/ppc64.s:712)	CALL	foo(SB)
-720 00114 (testdata/ppc64.s:720)	END
diff --git a/src/cmd/asm/internal/asm/testdata/ppc64.s b/src/cmd/asm/internal/asm/testdata/ppc64.s
index 46c1ee6..c46c6b2 100644
--- a/src/cmd/asm/internal/asm/testdata/ppc64.s
+++ b/src/cmd/asm/internal/asm/testdata/ppc64.s
@@ -6,7 +6,7 @@
 // the old assembler's (9a's) grammar and hand-writing complete
 // instructions for each rule, to guarantee we cover the same space.
 
-TEXT foo(SB),0,$0
+TEXT foo(SB),7,$0
 
 //inst:
 //
@@ -30,7 +30,7 @@ TEXT foo(SB),0,$0
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVW	(R1), R2
-	MOVW	(R1+R2), R3
+	MOVW	(R1+R2), R3 // MOVW (R1)(R2*1), R3
 
 //	LMOVB rreg ',' rreg
 //	{
@@ -50,7 +50,7 @@ TEXT foo(SB),0,$0
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVB	(R1), R2
-	MOVB	(R1+R2), R3
+	MOVB	(R1+R2), R3 // MOVB (R1)(R2*1), R3
 
 //
 // load floats
@@ -72,7 +72,7 @@ TEXT foo(SB),0,$0
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
-	FMOVD	$0.1, F2
+	FMOVD	$0.1, F2 // FMOVD $(0.10000000000000001), F2
 
 //	LFMOV freg ',' freg
 //	{
@@ -108,7 +108,7 @@ TEXT foo(SB),0,$0
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVW	R1, (R1)
-	MOVW	R1, (R2+R3)
+	MOVW	R1, (R2+R3) // MOVW R1, (R2)(R3*1)
 
 //	LMOVB rreg ',' addr
 //	{
@@ -122,7 +122,7 @@ TEXT foo(SB),0,$0
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVB	R1, (R1)
-	MOVB	R1, (R2+R3)
+	MOVB	R1, (R2+R3) // MOVB R1, (R2)(R3*1)
 //
 // store floats
 //
@@ -275,7 +275,7 @@ TEXT foo(SB),0,$0
 //	{
 //		outcode(int($1), &$2, 0, &$2);
 //	}
-	SUBME	R1
+	SUBME	R1 // SUBME R1, R1
 
 //
 // multiply-accumulate
@@ -380,22 +380,29 @@ TEXT foo(SB),0,$0
 //	{
 //		outcode(int($1), &nullgen, 0, &$2);
 //	}
+	BEQ	CR1, 2(PC)
 label0:
-	BR	1(PC)
-	BR	label0+0
+	BR	1(PC) // JMP 1(PC)
+	BEQ	CR1, 2(PC)
+	BR	label0+0 // JMP 62
 
 //	LBRA addr
 //	{
 //		outcode(int($1), &nullgen, 0, &$2);
 //	}
-	BR	4(R1)
-	BR	foo+0(SB)
+	BEQ	CR1, 2(PC)
+	BR	LR // JMP LR
+	BEQ	CR1, 2(PC)
+//	BR	0(R1)	// TODO should work
+	BEQ	CR1, 2(PC)
+	BR	foo+0(SB) // JMP foo(SB)
 
 //	LBRA '(' xlreg ')'
 //	{
 //		outcode(int($1), &nullgen, 0, &$3);
 //	}
-	BR	(CTR)
+	BEQ	CR1, 2(PC)
+	BR	(CTR) // JMP CTR
 
 //	LBRA ',' rel  // asm doesn't support the leading comma
 //	{
@@ -415,7 +422,7 @@ label0:
 //	}
 label1:
 	BEQ	CR1, 1(PC)
-	BEQ	CR1, label1
+	BEQ	CR1, label1 // BEQ CR1, 72
 
 //	LBRA creg ',' addr // TODO DOES NOT WORK in 9a
 //	{
@@ -441,7 +448,7 @@ label1:
 //	{
 //		outcode(int($1), &nullgen, int($2), &$5);
 //	}
-	BC	4, (CTR)
+//	BC	4, (CTR)	// TODO - should work
 
 //	LBRA con ',' con ',' rel
 //	{
@@ -451,7 +458,7 @@ label1:
 //		g.Offset = $2;
 //		outcode(int($1), &g, int(REG_R0+$4), &$6);
 //	}
-	BC	3, 4, label1
+//	BC	3, 4, label1 // TODO - should work
 
 //	LBRA con ',' con ',' addr // TODO mystery
 //	{
@@ -471,7 +478,7 @@ label1:
 //		g.Offset = $2;
 //		outcode(int($1), &g, int(REG_R0+$4), &$7);
 //	}
-	BC	3, 3, (LR)
+	BC	3, 3, (LR) // BC $3, R3, LR
 
 //
 // conditional trap // TODO NOT DEFINED
@@ -531,7 +538,7 @@ label1:
 //	{
 //		outcode(int($1), &$2, int($6.Reg), &$4);
 //	}
-	FCMPU	F1, F2, CR0
+//	FCMPU	F1, F2, CR0
 
 //
 // CMP
@@ -552,13 +559,13 @@ label1:
 //	{
 //		outcode(int($1), &$2, int($6.Reg), &$4);
 //	}
-	CMP	R1, R2, CR0
+	CMP	R1, R2, CR0 // CMP R1, CR0, R2
 
 //	LCMP rreg ',' imm ',' creg
 //	{
 //		outcode(int($1), &$2, int($6.Reg), &$4);
 //	}
-	CMP	R1, $4, CR0
+	CMP	R1, $4, CR0 // CMP R1, CR0, $4
 
 //
 // rotate and mask
@@ -567,25 +574,25 @@ label1:
 //	{
 //		outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
 //	}
-	RLDC $4, R1, $5, R2
+	RLDC $4, R1, $16, R2
 
 //	LRLWM  imm ',' rreg ',' mask ',' rreg
 //	{
 //		outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
 //	}
-	RLDC $26, R1, 4, 5, R2
+	RLDC $26, R1, 4, 5, R2 // RLDC $26, R1, $201326592, R2
 
 //	LRLWM  rreg ',' rreg ',' imm ',' rreg
 //	{
 //		outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
 //	}
-	RLDC	R1, R2, $4, R3
+	RLDCL	R1, R2, $7, R3
 
 //	LRLWM  rreg ',' rreg ',' mask ',' rreg
 //	{
 //		outgcode(int($1), &$2, int($4.Reg), &$6, &$8);
 //	}
-	RLWMI	R1, R2, 4, 5, R3
+	RLWMI	R1, R2, 4, 5, R3 // RLWMI	R1, R2, $201326592, R3
 
 //
 // load/store multiple
@@ -594,14 +601,14 @@ label1:
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
-	MOVMW	foo+0(SB), R2
+//	MOVMW	foo+0(SB), R2 // TODO TLS broke this!
 	MOVMW	4(R1), R2
 
 //	LMOVMW rreg ',' addr
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
-	MOVMW	R1, foo+0(SB)
+//	MOVMW	R1, foo+0(SB) // TODO TLS broke this!
 	MOVMW	R1, 4(R2)
 
 //
@@ -613,49 +620,49 @@ label1:
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	LSW	(R1), R2
-	LSW	(R1+R2), R3
+	LSW	(R1+R2), R3 // LSW	(R1)(R2*1), R3
 
 //	LXLD regaddr ',' imm ',' rreg
 //	{
 //		outgcode(int($1), &$2, 0, &$4, &$6);
 //	}
 	LSW	(R1), $1, R2
-	LSW	(R1+R2), $1, R3
+	LSW	(R1+R2), $1, R3 // LSW	(R1)(R2*1), $1, R3
 
 //	LXST rreg ',' regaddr
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	STSW	R1, (R2)
-	STSW	R1, (R2+R3)
+	STSW	R1, (R2+R3) // STSW	R1, (R2)(R3*1)
 
 //	LXST rreg ',' imm ',' regaddr
 //	{
 //		outgcode(int($1), &$2, 0, &$4, &$6);
 //	}
 	STSW	R1, $1, (R2)
-	STSW	R1, $1, (R2+R3)
+	STSW	R1, $1, (R2+R3) // STSW	R1, $1, (R2)(R3*1)
 
 //	LXMV regaddr ',' rreg
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVHBR	(R1), R2
-	MOVHBR	(R1+R2), R3
+	MOVHBR	(R1+R2), R3 // MOVHBR	(R1)(R2*1), R3
 
 //	LXMV rreg ',' regaddr
 //	{
 //		outcode(int($1), &$2, 0, &$4);
 //	}
 	MOVHBR	R1, (R2)
-	MOVHBR	R1, (R2+R3)
+	MOVHBR	R1, (R2+R3) // MOVHBR	R1, (R2)(R3*1)
 
 //	LXOP regaddr
 //	{
 //		outcode(int($1), &$2, 0, &nullgen);
 //	}
 	DCBF	(R1)
-	DCBF	(R1+R2)
+	DCBF	(R1+R2) // DCBF	(R1)(R2*1)
 
 //
 // NOP
@@ -702,12 +709,15 @@ label1:
 //	{
 //		outcode(int($1), &nullgen, 0, &nullgen);
 //	}
+	BEQ	2(PC)
 	RET
 
 // More BR/BL cases, and canonical names JMP, CALL.
 
-	BR	foo(SB)
-	BL	foo(SB)
+	BEQ	2(PC)
+	BR	foo(SB) // JMP foo(SB)
+	BL	foo(SB) //  CALL foo(SB)
+	BEQ	2(PC)
 	JMP	foo(SB)
 	CALL	foo(SB)
 
diff --git a/src/cmd/asm/internal/flags/flags.go b/src/cmd/asm/internal/flags/flags.go
index 89bc6f3..fd42e84 100644
--- a/src/cmd/asm/internal/flags/flags.go
+++ b/src/cmd/asm/internal/flags/flags.go
@@ -20,6 +20,7 @@ var (
 	TrimPath   = flag.String("trimpath", "", "remove prefix from recorded source file paths")
 	Shared     = flag.Bool("shared", false, "generate code that can be linked into a shared library")
 	Dynlink    = flag.Bool("dynlink", false, "support references to Go symbols defined in other shared libraries")
+	AllErrors = flag.Bool("e", false, "no limit on number of errors reported")
 )
 
 var (
diff --git a/src/cmd/asm/main.go b/src/cmd/asm/main.go
index db0e28e..f48050c 100644
--- a/src/cmd/asm/main.go
+++ b/src/cmd/asm/main.go
@@ -47,21 +47,28 @@ func main() {
 	}
 	ctxt.Bso = obj.Binitw(os.Stdout)
 	defer ctxt.Bso.Flush()
-	ctxt.Diag = log.Fatalf
 	output := obj.Binitw(fd)
 	fmt.Fprintf(output, "go object %s %s %s\n", obj.Getgoos(), obj.Getgoarch(), obj.Getgoversion())
 	fmt.Fprintf(output, "!\n")
 
 	lexer := lex.NewLexer(flag.Arg(0), ctxt)
 	parser := asm.NewParser(ctxt, architecture, lexer)
+	diag := false
+	ctxt.DiagFunc = func(format string, args ...interface{}) {
+		diag = true
+		log.Printf(format, args...)
+	}
 	pList := obj.Linknewplist(ctxt)
 	var ok bool
 	pList.Firstpc, ok = parser.Parse()
-	if !ok {
+	if ok {
+		// reports errors to parser.Errorf
+		obj.Writeobjdirect(ctxt, output)
+	}
+	if !ok || diag {
 		log.Printf("asm: assembly of %s failed", flag.Arg(0))
 		os.Remove(*flags.OutputFile)
 		os.Exit(1)
 	}
-	obj.Writeobjdirect(ctxt, output)
 	output.Flush()
 }
diff --git a/src/cmd/compile/internal/amd64/prog.go b/src/cmd/compile/internal/amd64/prog.go
index 649b706..b3724b4 100644
--- a/src/cmd/compile/internal/amd64/prog.go
+++ b/src/cmd/compile/internal/amd64/prog.go
@@ -34,6 +34,7 @@ var progtable = [x86.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the Intel opcode.
diff --git a/src/cmd/compile/internal/arm/peep.go b/src/cmd/compile/internal/arm/peep.go
index d7a9c5f..bc49ebc 100644
--- a/src/cmd/compile/internal/arm/peep.go
+++ b/src/cmd/compile/internal/arm/peep.go
@@ -1366,6 +1366,7 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
 		obj.AFUNCDATA,
 		obj.AVARDEF,
 		obj.AVARKILL,
+		obj.AVARLIVE,
 		obj.AUSEFIELD:
 		return 0
 	}
diff --git a/src/cmd/compile/internal/arm/prog.go b/src/cmd/compile/internal/arm/prog.go
index 8a304e2..81be77a 100644
--- a/src/cmd/compile/internal/arm/prog.go
+++ b/src/cmd/compile/internal/arm/prog.go
@@ -33,6 +33,7 @@ var progtable = [arm.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the Intel opcode.
diff --git a/src/cmd/compile/internal/arm64/peep.go b/src/cmd/compile/internal/arm64/peep.go
index b61ac6e..daa626f 100644
--- a/src/cmd/compile/internal/arm64/peep.go
+++ b/src/cmd/compile/internal/arm64/peep.go
@@ -711,6 +711,7 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
 		obj.AFUNCDATA,
 		obj.AVARDEF,
 		obj.AVARKILL,
+		obj.AVARLIVE,
 		obj.AUSEFIELD:
 		return 0
 	}
diff --git a/src/cmd/compile/internal/arm64/prog.go b/src/cmd/compile/internal/arm64/prog.go
index a4b8ebe..a8e8bc5 100644
--- a/src/cmd/compile/internal/arm64/prog.go
+++ b/src/cmd/compile/internal/arm64/prog.go
@@ -34,6 +34,7 @@ var progtable = [arm64.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the Power opcode.
diff --git a/src/cmd/compile/internal/big/int.go b/src/cmd/compile/internal/big/int.go
index 16b7cd1..67ab704 100644
--- a/src/cmd/compile/internal/big/int.go
+++ b/src/cmd/compile/internal/big/int.go
@@ -273,7 +273,7 @@ func (z *Int) Mod(x, y *Int) *Int {
 // DivMod implements Euclidean division and modulus (unlike Go):
 //
 //	q = x div y  such that
-//	m = x - y*q  with 0 <= m < |q|
+//	m = x - y*q  with 0 <= m < |y|
 //
 // (See Raymond T. Boute, ``The Euclidean definition of the functions
 // div and mod''. ACM Transactions on Programming Languages and
diff --git a/src/cmd/compile/internal/big/int_test.go b/src/cmd/compile/internal/big/int_test.go
index 5d65217..45a3765 100644
--- a/src/cmd/compile/internal/big/int_test.go
+++ b/src/cmd/compile/internal/big/int_test.go
@@ -544,6 +544,9 @@ var expTests = []struct {
 	{"0x8000000000000000", "1000", "6719", "1603"},
 	{"0x8000000000000000", "1000000", "6719", "3199"},
 	{"0x8000000000000000", "-1000000", "6719", "1"},
+
+	{"0xffffffffffffffffffffffffffffffff", "0x12345678123456781234567812345678123456789", "0x01112222333344445555666677778889", "0x36168FA1DB3AAE6C8CE647E137F97A"},
+
 	{
 		"2938462938472983472983659726349017249287491026512746239764525612965293865296239471239874193284792387498274256129746192347",
 		"298472983472983471903246121093472394872319615612417471234712061",
@@ -552,11 +555,23 @@ var expTests = []struct {
 	},
 	// test case for issue 8822
 	{
+		"110012891183630896460173593721179634992505463752690475427779280061032468766887567357609056806046466243531968695727526232851404087554203740493176464281852700795553727635031156460546028675936629238941409408374795071949342675328316945655164667650254349023483145256274185156465881609558628390220513536530529470731360847807427297278748034576438481974995482975700269269275025056342970795272990042677697807685656954599452355868926270591788849987729893975050612063954555915037716775009312694775035 [...]
+		"0xB08FFB20760FFED58FADA86DFEF71AD72AA0FA763219618FE022C197E54708BB1191C66470250FCE8879487507CEE41381CA4D932F81C2B3F1AB20B539D50DCD",
+		"0xAC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E37 [...]
+		"214842521977763024996399388837777103219931130979872010505011829095813593576185795667465563725893853616836105247305090413288550665149633855225708948390358847130516401714741865487135466864767613064364341464751401562843891818086750165768458333404948482836810888865842197505544080605567694866280290287207273932931116788263564804554339092335205041120744013761330771504712375494741491902420104695390064495966115766125739557543490423291306311282346379247864665857034884605402284774408534933920862 [...]
+	},
+	{
 		"-0x1BCE04427D8032319A89E5C4136456671AC620883F2C4139E57F91307C485AD2D6204F4F87A58262652DB5DBBAC72B0613E51B835E7153BEC6068F5C8D696B74DBD18FEC316AEF73985CF0475663208EB46B4F17DD9DA55367B03323E5491A70997B90C059FB34809E6EE55BCFBD5F2F52233BFE62E6AA9E4E26A1D4C2439883D14F2633D55D8AA66A1ACD5595E778AC3A280517F1157989E70C1A437B849F1877B779CC3CDDEDE2DAA6594A6C66D181A00A5F777EE60596D8773998F6E988DEAE4CCA60E4DDCF9590543C89F74F603259FCAD71660D30294FBBE6490300F78A9D63FA660DC9417B8B9DDA28BEB3977B621B98 [...]
 		"0xB08FFB20760FFED58FADA86DFEF71AD72AA0FA763219618FE022C197E54708BB1191C66470250FCE8879487507CEE41381CA4D932F81C2B3F1AB20B539D50DCD",
 		"0xAC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B855F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773BCA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB694B5C803D89F7AE435DE236D525F54759B65E37 [...]
 		"214842521977763024996399388837777103219931130979872010505011829095813593576185795667465563725893853616836105247305090413288550665149633855225708948390358847130516401714741865487135466864767613064364341464751401562843891818086750165768458333404948482836810888865842197505544080605567694866280290287207273932931116788263564804554339092335205041120744013761330771504712375494741491902420104695390064495966115766125739557543490423291306311282346379247864665857034884605402284774408534933920862 [...]
 	},
+
+	// test cases for issue 13907
+	{"0xffffffff00000001", "0xffffffff00000001", "0xffffffff00000001", "0"},
+	{"0xffffffffffffffff00000001", "0xffffffffffffffff00000001", "0xffffffffffffffff00000001", "0"},
+	{"0xffffffffffffffffffffffff00000001", "0xffffffffffffffffffffffff00000001", "0xffffffffffffffffffffffff00000001", "0"},
+	{"0xffffffffffffffffffffffffffffffff00000001", "0xffffffffffffffffffffffffffffffff00000001", "0xffffffffffffffffffffffffffffffff00000001", "0"},
 }
 
 func TestExp(t *testing.T) {
@@ -584,7 +599,7 @@ func TestExp(t *testing.T) {
 			t.Errorf("#%d: %v is not normalized", i, *z1)
 		}
 		if z1.Cmp(out) != 0 {
-			t.Errorf("#%d: got %s want %s", i, z1, out)
+			t.Errorf("#%d: got %x want %x", i, z1, out)
 		}
 
 		if m == nil {
@@ -593,7 +608,7 @@ func TestExp(t *testing.T) {
 			m = &Int{abs: nat{}} // m != nil && len(m.abs) == 0
 			z2 := new(Int).Exp(x, y, m)
 			if z2.Cmp(z1) != 0 {
-				t.Errorf("#%d: got %s want %s", i, z2, z1)
+				t.Errorf("#%d: got %x want %x", i, z2, z1)
 			}
 		}
 	}
@@ -1369,6 +1384,14 @@ func TestModSqrt(t *testing.T) {
 				t.Errorf("#%d: failed (sqrt(e) = %s)", i, &sqrt)
 			}
 		}
+
+		if testing.Short() && i > 2 {
+			break
+		}
+	}
+
+	if testing.Short() {
+		return
 	}
 
 	// exhaustive test for small values
diff --git a/src/cmd/compile/internal/big/nat.go b/src/cmd/compile/internal/big/nat.go
index e60318d..79cf6e0 100644
--- a/src/cmd/compile/internal/big/nat.go
+++ b/src/cmd/compile/internal/big/nat.go
@@ -213,25 +213,25 @@ func (z nat) montgomery(x, y, m nat, k Word, n int) nat {
 	if len(x) != n || len(y) != n || len(m) != n {
 		panic("math/big: mismatched montgomery number lengths")
 	}
-	var c1, c2, c3 Word
 	z = z.make(n)
 	z.clear()
+	var c Word
 	for i := 0; i < n; i++ {
 		d := y[i]
-		c2 = addMulVVW(z, x, d)
+		c2 := addMulVVW(z, x, d)
 		t := z[0] * k
-		c3 = addMulVVW(z, m, t)
+		c3 := addMulVVW(z, m, t)
 		copy(z, z[1:])
-		cx := c1 + c2
+		cx := c + c2
 		cy := cx + c3
 		z[n-1] = cy
 		if cx < c2 || cy < c3 {
-			c1 = 1
+			c = 1
 		} else {
-			c1 = 0
+			c = 0
 		}
 	}
-	if c1 != 0 {
+	if c != 0 {
 		subVV(z, z, m)
 	}
 	return z
@@ -1056,23 +1056,19 @@ func (z nat) expNNWindowed(x, y, m nat) nat {
 // expNNMontgomery calculates x**y mod m using a fixed, 4-bit window.
 // Uses Montgomery representation.
 func (z nat) expNNMontgomery(x, y, m nat) nat {
-	var zz, one, rr, RR nat
-
 	numWords := len(m)
 
 	// We want the lengths of x and m to be equal.
+	// It is OK if x >= m as long as len(x) == len(m).
 	if len(x) > numWords {
-		_, rr = rr.div(rr, x, m)
-	} else if len(x) < numWords {
-		rr = rr.make(numWords)
-		rr.clear()
-		for i := range x {
-			rr[i] = x[i]
-		}
-	} else {
-		rr = x
+		_, x = nat(nil).div(nil, x, m)
+		// Note: now len(x) <= numWords, not guaranteed ==.
+	}
+	if len(x) < numWords {
+		rr := make(nat, numWords)
+		copy(rr, x)
+		x = rr
 	}
-	x = rr
 
 	// Ideally the precomputations would be performed outside, and reused
 	// k0 = -m**-1 mod 2**_W. Algorithm from: Dumas, J.G. "On Newton–Raphson
@@ -1086,8 +1082,8 @@ func (z nat) expNNMontgomery(x, y, m nat) nat {
 	k0 = -k0
 
 	// RR = 2**(2*_W*len(m)) mod m
-	RR = RR.setWord(1)
-	zz = zz.shl(RR, uint(2*numWords*_W))
+	RR := nat(nil).setWord(1)
+	zz := nat(nil).shl(RR, uint(2*numWords*_W))
 	_, RR = RR.div(RR, zz, m)
 	if len(RR) < numWords {
 		zz = zz.make(numWords)
@@ -1095,8 +1091,7 @@ func (z nat) expNNMontgomery(x, y, m nat) nat {
 		RR = zz
 	}
 	// one = 1, with equal length to that of m
-	one = one.make(numWords)
-	one.clear()
+	one := make(nat, numWords)
 	one[0] = 1
 
 	const n = 4
@@ -1131,6 +1126,23 @@ func (z nat) expNNMontgomery(x, y, m nat) nat {
 	}
 	// convert to regular number
 	zz = zz.montgomery(z, one, m, k0, numWords)
+
+	// One last reduction, just in case.
+	// See golang.org/issue/13907.
+	if zz.cmp(m) >= 0 {
+		// Common case is m has high bit set; in that case,
+		// since zz is the same length as m, there can be just
+		// one multiple of m to remove. Just subtract.
+		// We think that the subtract should be sufficient in general,
+		// so do that unconditionally, but double-check,
+		// in case our beliefs are wrong.
+		// The div is not expected to be reached.
+		zz = zz.sub(zz, m)
+		if zz.cmp(m) >= 0 {
+			_, zz = nat(nil).div(nil, zz, m)
+		}
+	}
+
 	return zz.norm()
 }
 
diff --git a/src/cmd/compile/internal/big/nat_test.go b/src/cmd/compile/internal/big/nat_test.go
index 56b62d2..563ccb3 100644
--- a/src/cmd/compile/internal/big/nat_test.go
+++ b/src/cmd/compile/internal/big/nat_test.go
@@ -483,6 +483,12 @@ var expNNTests = []struct {
 		"29834729834729834729347290846729561262544958723956495615629569234729836259263598127342374289365912465901365498236492183464",
 		"23537740700184054162508175125554701713153216681790245129157191391322321508055833908509185839069455749219131480588829346291",
 	},
+	{
+		"11521922904531591643048817447554701904414021819823889996244743037378330903763518501116638828335352811871131385129455853417360623007349090150042001944696604737499160174391019030572483602867266711107136838523916077674888297896995042968746762200926853379",
+		"426343618817810911523",
+		"444747819283133684179",
+		"42",
+	},
 }
 
 func TestExpNN(t *testing.T) {
diff --git a/src/cmd/compile/internal/gc/esc.go b/src/cmd/compile/internal/gc/esc.go
index 7855db2..ff983e7 100644
--- a/src/cmd/compile/internal/gc/esc.go
+++ b/src/cmd/compile/internal/gc/esc.go
@@ -1808,6 +1808,13 @@ recurse:
 	e.pdepth--
 }
 
+// This special tag is applied to uintptr variables
+// that we believe may hold unsafe.Pointers for
+// calls into assembly functions.
+// It is logically a constant, but using a var
+// lets us take the address below to get a *string.
+var unsafeUintptrTag = "unsafe-uintptr"
+
 func esctag(e *EscState, func_ *Node) {
 	func_.Esc = EscFuncTagged
 
@@ -1822,6 +1829,29 @@ func esctag(e *EscState, func_ *Node) {
 			}
 		}
 
+		// Assume that uintptr arguments must be held live across the call.
+		// This is most important for syscall.Syscall.
+		// See golang.org/issue/13372.
+		// This really doesn't have much to do with escape analysis per se,
+		// but we are reusing the ability to annotate an individual function
+		// argument and pass those annotations along to importing code.
+		narg := 0
+		for t := getinargx(func_.Type).Type; t != nil; t = t.Down {
+			narg++
+			if t.Type.Etype == TUINTPTR {
+				if Debug['m'] != 0 {
+					var name string
+					if t.Sym != nil {
+						name = t.Sym.Name
+					} else {
+						name = fmt.Sprintf("arg#%d", narg)
+					}
+					Warnl(int(func_.Lineno), "%v assuming %v is unsafe uintptr", funcSym(func_), name)
+				}
+				t.Note = &unsafeUintptrTag
+			}
+		}
+
 		return
 	}
 
diff --git a/src/cmd/compile/internal/gc/fmt.go b/src/cmd/compile/internal/gc/fmt.go
index 4da60f4..64b6e36 100644
--- a/src/cmd/compile/internal/gc/fmt.go
+++ b/src/cmd/compile/internal/gc/fmt.go
@@ -419,7 +419,7 @@ func symfmt(s *Sym, flag int) string {
 	if s.Pkg != nil && flag&obj.FmtShort == 0 {
 		switch fmtmode {
 		case FErr: // This is for the user
-			if s.Pkg == localpkg {
+			if s.Pkg == builtinpkg || s.Pkg == localpkg {
 				return s.Name
 			}
 
diff --git a/src/cmd/compile/internal/gc/gen.go b/src/cmd/compile/internal/gc/gen.go
index 27737b7..836834f 100644
--- a/src/cmd/compile/internal/gc/gen.go
+++ b/src/cmd/compile/internal/gc/gen.go
@@ -868,6 +868,9 @@ func gen(n *Node) {
 
 	case OVARKILL:
 		gvarkill(n.Left)
+
+	case OVARLIVE:
+		gvarlive(n.Left)
 	}
 
 ret:
diff --git a/src/cmd/compile/internal/gc/gsubr.go b/src/cmd/compile/internal/gc/gsubr.go
index 14d4d3d..30bf736 100644
--- a/src/cmd/compile/internal/gc/gsubr.go
+++ b/src/cmd/compile/internal/gc/gsubr.go
@@ -185,7 +185,7 @@ func fixautoused(p *obj.Prog) {
 			continue
 		}
 
-		if (p.As == obj.AVARDEF || p.As == obj.AVARKILL) && p.To.Node != nil && !((p.To.Node).(*Node)).Used {
+		if (p.As == obj.AVARDEF || p.As == obj.AVARKILL || p.As == obj.AVARLIVE) && p.To.Node != nil && !((p.To.Node).(*Node)).Used {
 			// Cannot remove VARDEF instruction, because - unlike TYPE handled above -
 			// VARDEFs are interspersed with other code, and a jump might be using the
 			// VARDEF as a target. Replace with a no-op instead. A later pass will remove
diff --git a/src/cmd/compile/internal/gc/lex.go b/src/cmd/compile/internal/gc/lex.go
index fb30d58..b9c2735 100644
--- a/src/cmd/compile/internal/gc/lex.go
+++ b/src/cmd/compile/internal/gc/lex.go
@@ -105,7 +105,7 @@ func Main() {
 
 	Thearch.Linkarchinit()
 	Ctxt = obj.Linknew(Thearch.Thelinkarch)
-	Ctxt.Diag = Yyerror
+	Ctxt.DiagFunc = Yyerror
 	Ctxt.Bso = &bstdout
 	bstdout = *obj.Binitw(os.Stdout)
 
@@ -843,6 +843,13 @@ func importfile(f *Val, line int) {
 		}
 		p := fmt.Sprintf("package %s %s\n$$\n", importpkg.Name, tag)
 		cannedimports(file, p)
+		// Reset incannedimport flag (we are not truly in a
+		// canned import) - this will cause importpkg.Direct to
+		// be set via parser.import_package (was issue #13977).
+		//
+		// TODO(gri) Remove this global variable and convoluted
+		// code in the process of streamlining the import code.
+		incannedimport = 0
 
 	default:
 		Yyerror("no import in %q", f.U.(string))
@@ -925,13 +932,9 @@ func isfrog(c int) bool {
 }
 
 type yySymType struct {
-	yys  int
-	node *Node
-	list *NodeList
-	typ  *Type
-	sym  *Sym
-	val  Val
-	op   Op
+	sym *Sym
+	val Val
+	op  Op
 }
 
 const (
diff --git a/src/cmd/compile/internal/gc/opnames.go b/src/cmd/compile/internal/gc/opnames.go
index 9134bd4..0609643 100644
--- a/src/cmd/compile/internal/gc/opnames.go
+++ b/src/cmd/compile/internal/gc/opnames.go
@@ -149,6 +149,7 @@ var opnames = []string{
 	OCFUNC:           "CFUNC",
 	OCHECKNIL:        "CHECKNIL",
 	OVARKILL:         "VARKILL",
+	OVARLIVE:         "VARLIVE",
 	OREGISTER:        "REGISTER",
 	OINDREG:          "INDREG",
 	OCMP:             "CMP",
diff --git a/src/cmd/compile/internal/gc/order.go b/src/cmd/compile/internal/gc/order.go
index 84b96c2..a2e1228 100644
--- a/src/cmd/compile/internal/gc/order.go
+++ b/src/cmd/compile/internal/gc/order.go
@@ -243,6 +243,12 @@ func cleantempnopop(mark *NodeList, order *Order, out **NodeList) {
 	var kill *Node
 
 	for l := order.temp; l != mark; l = l.Next {
+		if l.N.Name.Keepalive {
+			l.N.Name.Keepalive = false
+			kill = Nod(OVARLIVE, l.N, nil)
+			typecheck(&kill, Etop)
+			*out = list(*out, kill)
+		}
 		kill = Nod(OVARKILL, l.N, nil)
 		typecheck(&kill, Etop)
 		*out = list(*out, kill)
@@ -375,6 +381,28 @@ func ordercall(n *Node, order *Order) {
 	orderexpr(&n.Left, order, nil)
 	orderexpr(&n.Right, order, nil) // ODDDARG temp
 	ordercallargs(&n.List, order)
+
+	if n.Op == OCALLFUNC {
+		for l, t := n.List, getinargx(n.Left.Type).Type; l != nil && t != nil; l, t = l.Next, t.Down {
+			// Check for "unsafe-uintptr" tag provided by escape analysis.
+			// If present and the argument is really a pointer being converted
+			// to uintptr, arrange for the pointer to be kept alive until the call
+			// returns, by copying it into a temp and marking that temp
+			// still alive when we pop the temp stack.
+			if t.Note != nil && *t.Note == unsafeUintptrTag {
+				xp := &l.N
+				for (*xp).Op == OCONVNOP && !Isptr[(*xp).Type.Etype] {
+					xp = &(*xp).Left
+				}
+				x := *xp
+				if Isptr[x.Type.Etype] {
+					x = ordercopyexpr(x, x.Type, order, 0)
+					x.Name.Keepalive = true
+					*xp = x
+				}
+			}
+		}
+	}
 }
 
 // Ordermapassign appends n to order->out, introducing temporaries
@@ -464,7 +492,7 @@ func orderstmt(n *Node, order *Order) {
 	default:
 		Fatalf("orderstmt %v", Oconv(int(n.Op), 0))
 
-	case OVARKILL:
+	case OVARKILL, OVARLIVE:
 		order.out = list(order.out, n)
 
 	case OAS:
diff --git a/src/cmd/compile/internal/gc/parser.go b/src/cmd/compile/internal/gc/parser.go
index 3279f4c..282e855 100644
--- a/src/cmd/compile/internal/gc/parser.go
+++ b/src/cmd/compile/internal/gc/parser.go
@@ -668,9 +668,14 @@ func (p *parser) simple_stmt(labelOk, rangeOk bool) *Node {
 			if labelOk {
 				// If we have a labelname, it was parsed by operand
 				// (calling p.name()) and given an ONAME, ONONAME, OTYPE, OPACK, or OLITERAL node.
+				// We only have a labelname if there is a symbol (was issue 14006).
 				switch lhs.Op {
 				case ONAME, ONONAME, OTYPE, OPACK, OLITERAL:
-					lhs = newname(lhs.Sym)
+					if lhs.Sym != nil {
+						lhs = newname(lhs.Sym)
+						break
+					}
+					fallthrough
 				default:
 					p.syntax_error("expecting semicolon or newline or }")
 					// we already progressed, no need to advance
diff --git a/src/cmd/compile/internal/gc/pgen.go b/src/cmd/compile/internal/gc/pgen.go
index ea9b368..ffc0ab9 100644
--- a/src/cmd/compile/internal/gc/pgen.go
+++ b/src/cmd/compile/internal/gc/pgen.go
@@ -94,7 +94,11 @@ func gvardefx(n *Node, as int) {
 
 	switch n.Class {
 	case PAUTO, PPARAM, PPARAMOUT:
-		Thearch.Gins(as, nil, n)
+		if as == obj.AVARLIVE {
+			Thearch.Gins(as, n, nil)
+		} else {
+			Thearch.Gins(as, nil, n)
+		}
 	}
 }
 
@@ -106,13 +110,17 @@ func gvarkill(n *Node) {
 	gvardefx(n, obj.AVARKILL)
 }
 
+func gvarlive(n *Node) {
+	gvardefx(n, obj.AVARLIVE)
+}
+
 func removevardef(firstp *obj.Prog) {
 	for p := firstp; p != nil; p = p.Link {
-		for p.Link != nil && (p.Link.As == obj.AVARDEF || p.Link.As == obj.AVARKILL) {
+		for p.Link != nil && (p.Link.As == obj.AVARDEF || p.Link.As == obj.AVARKILL || p.Link.As == obj.AVARLIVE) {
 			p.Link = p.Link.Link
 		}
 		if p.To.Type == obj.TYPE_BRANCH {
-			for p.To.Val.(*obj.Prog) != nil && (p.To.Val.(*obj.Prog).As == obj.AVARDEF || p.To.Val.(*obj.Prog).As == obj.AVARKILL) {
+			for p.To.Val.(*obj.Prog) != nil && (p.To.Val.(*obj.Prog).As == obj.AVARDEF || p.To.Val.(*obj.Prog).As == obj.AVARKILL || p.To.Val.(*obj.Prog).As == obj.AVARLIVE) {
 				p.To.Val = p.To.Val.(*obj.Prog).Link
 			}
 		}
diff --git a/src/cmd/compile/internal/gc/plive.go b/src/cmd/compile/internal/gc/plive.go
index 5af78d1..feb66f6 100644
--- a/src/cmd/compile/internal/gc/plive.go
+++ b/src/cmd/compile/internal/gc/plive.go
@@ -806,7 +806,7 @@ func checkauto(fn *Node, p *obj.Prog, n *Node) {
 		return
 	}
 
-	fmt.Printf("checkauto %v: %v (%p; class=%d) not found in %v\n", Curfn, n, n, n.Class, p)
+	fmt.Printf("checkauto %v: %v (%p; class=%d) not found in %p %v\n", funcSym(Curfn), n, n, n.Class, p, p)
 	for l := fn.Func.Dcl; l != nil; l = l.Next {
 		fmt.Printf("\t%v (%p; class=%d)\n", l.N, l.N, l.N.Class)
 	}
diff --git a/src/cmd/compile/internal/gc/racewalk.go b/src/cmd/compile/internal/gc/racewalk.go
index ec94042..8a6eba3 100644
--- a/src/cmd/compile/internal/gc/racewalk.go
+++ b/src/cmd/compile/internal/gc/racewalk.go
@@ -143,7 +143,7 @@ func instrumentnode(np **Node, init **NodeList, wr int, skip int) {
 		goto ret
 
 		// can't matter
-	case OCFUNC, OVARKILL:
+	case OCFUNC, OVARKILL, OVARLIVE:
 		goto ret
 
 	case OBLOCK:
diff --git a/src/cmd/compile/internal/gc/reg.go b/src/cmd/compile/internal/gc/reg.go
index f575094..14dc03b 100644
--- a/src/cmd/compile/internal/gc/reg.go
+++ b/src/cmd/compile/internal/gc/reg.go
@@ -1073,6 +1073,9 @@ func regopt(firstp *obj.Prog) {
 
 	for f := firstf; f != nil; f = f.Link {
 		p := f.Prog
+		// AVARLIVE must be considered a use, do not skip it.
+		// Otherwise the variable will be optimized away,
+		// and the whole point of AVARLIVE is to keep it on the stack.
 		if p.As == obj.AVARDEF || p.As == obj.AVARKILL {
 			continue
 		}
diff --git a/src/cmd/compile/internal/gc/syntax.go b/src/cmd/compile/internal/gc/syntax.go
index 993e2ae..a11b37e 100644
--- a/src/cmd/compile/internal/gc/syntax.go
+++ b/src/cmd/compile/internal/gc/syntax.go
@@ -128,6 +128,7 @@ type Name struct {
 	Captured  bool // is the variable captured by a closure
 	Byval     bool // is the variable captured by value or by reference
 	Needzero  bool // if it contains pointers, needs to be zeroed on function entry
+	Keepalive bool // mark value live across unknown assembly call
 }
 
 type Param struct {
@@ -342,6 +343,7 @@ const (
 	OCFUNC      // reference to c function pointer (not go func value)
 	OCHECKNIL   // emit code to ensure pointer/interface not nil
 	OVARKILL    // variable is dead
+	OVARLIVE    // variable is alive
 
 	// thearch-specific registers
 	OREGISTER // a register, such as AX.
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index 8c1305f..f74bb33 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.go
@@ -2023,7 +2023,8 @@ OpSwitch:
 		OEMPTY,
 		OGOTO,
 		OXFALL,
-		OVARKILL:
+		OVARKILL,
+		OVARLIVE:
 		ok |= Etop
 		break OpSwitch
 
diff --git a/src/cmd/compile/internal/gc/walk.go b/src/cmd/compile/internal/gc/walk.go
index 25cd828..e008317 100644
--- a/src/cmd/compile/internal/gc/walk.go
+++ b/src/cmd/compile/internal/gc/walk.go
@@ -216,7 +216,8 @@ func walkstmt(np **Node) {
 		ODCLCONST,
 		ODCLTYPE,
 		OCHECKNIL,
-		OVARKILL:
+		OVARKILL,
+		OVARLIVE:
 		break
 
 	case OBLOCK:
diff --git a/src/cmd/compile/internal/mips64/peep.go b/src/cmd/compile/internal/mips64/peep.go
index 3d82c81..f97be60 100644
--- a/src/cmd/compile/internal/mips64/peep.go
+++ b/src/cmd/compile/internal/mips64/peep.go
@@ -688,6 +688,7 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
 		obj.AFUNCDATA,
 		obj.AVARDEF,
 		obj.AVARKILL,
+		obj.AVARLIVE,
 		obj.AUSEFIELD:
 		return 0
 	}
diff --git a/src/cmd/compile/internal/mips64/prog.go b/src/cmd/compile/internal/mips64/prog.go
index bf13d82..b07c7fe 100644
--- a/src/cmd/compile/internal/mips64/prog.go
+++ b/src/cmd/compile/internal/mips64/prog.go
@@ -34,6 +34,7 @@ var progtable = [mips.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the MIPS opcode.
diff --git a/src/cmd/compile/internal/ppc64/peep.go b/src/cmd/compile/internal/ppc64/peep.go
index fadaa4a..1ff3109 100644
--- a/src/cmd/compile/internal/ppc64/peep.go
+++ b/src/cmd/compile/internal/ppc64/peep.go
@@ -953,6 +953,7 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
 		obj.AFUNCDATA,
 		obj.AVARDEF,
 		obj.AVARKILL,
+		obj.AVARLIVE,
 		obj.AUSEFIELD:
 		return 0
 	}
diff --git a/src/cmd/compile/internal/ppc64/prog.go b/src/cmd/compile/internal/ppc64/prog.go
index 92293be..6b48256 100644
--- a/src/cmd/compile/internal/ppc64/prog.go
+++ b/src/cmd/compile/internal/ppc64/prog.go
@@ -34,6 +34,7 @@ var progtable = [ppc64.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the Power opcode.
diff --git a/src/cmd/compile/internal/x86/prog.go b/src/cmd/compile/internal/x86/prog.go
index 22ee23d..ccac290 100644
--- a/src/cmd/compile/internal/x86/prog.go
+++ b/src/cmd/compile/internal/x86/prog.go
@@ -40,6 +40,7 @@ var progtable = [x86.ALAST]obj.ProgInfo{
 	obj.ACHECKNIL: {Flags: gc.LeftRead},
 	obj.AVARDEF:   {Flags: gc.Pseudo | gc.RightWrite},
 	obj.AVARKILL:  {Flags: gc.Pseudo | gc.RightWrite},
+	obj.AVARLIVE:  {Flags: gc.Pseudo | gc.LeftRead},
 
 	// NOP is an internal no-op that also stands
 	// for USED and SET annotations, not the Intel opcode.
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index 4cd696a..156b868 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -336,7 +336,11 @@ func (t *tester) registerTests() {
 	} else {
 		// Use a format string to only list packages and commands that have tests.
 		const format = "{{if (or .TestGoFiles .XTestGoFiles)}}{{.ImportPath}}{{end}}"
-		cmd := exec.Command("go", "list", "-f", format, "std")
+		cmd := exec.Command("go", "list", "-f", format)
+		if t.race {
+			cmd.Args = append(cmd.Args, "-tags", "race")
+		}
+		cmd.Args = append(cmd.Args, "std")
 		if !t.race {
 			cmd.Args = append(cmd.Args, "cmd")
 		}
diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go
index ea2eb77..5db4bc6 100644
--- a/src/cmd/go/alldocs.go
+++ b/src/cmd/go/alldocs.go
@@ -603,6 +603,14 @@ syntax of package template.  The default output is equivalent to -f
         XTestImports []string // imports from XTestGoFiles
     }
 
+The error information, if any, is
+
+    type PackageError struct {
+        ImportStack   []string // shortest path from package named on command line to this one
+        Pos           string   // position of error (if present, file:line:col)
+        Err           string   // the error itself
+    }
+
 The template function "join" calls strings.Join.
 
 The template function "context" returns the build context, defined as:
diff --git a/src/cmd/go/build.go b/src/cmd/go/build.go
index ebeb11c..1286700 100644
--- a/src/cmd/go/build.go
+++ b/src/cmd/go/build.go
@@ -822,7 +822,9 @@ func goFilesPackage(gofiles []string) *Package {
 	pkg := new(Package)
 	pkg.local = true
 	pkg.cmdline = true
+	stk.push("main")
 	pkg.load(&stk, bp, err)
+	stk.pop()
 	pkg.localPrefix = dirToImportPath(dir)
 	pkg.ImportPath = "command-line-arguments"
 	pkg.target = ""
@@ -1833,6 +1835,7 @@ var objectMagic = [][]byte{
 	{0x4d, 0x5a, 0x90, 0x00, 0x03, 0x00},      // PE (Windows) as generated by 6l/8l and gcc
 	{0x00, 0x00, 0x01, 0xEB},                  // Plan 9 i386
 	{0x00, 0x00, 0x8a, 0x97},                  // Plan 9 amd64
+	{0x00, 0x00, 0x06, 0x47},                  // Plan 9 arm
 }
 
 func isObject(s string) bool {
@@ -2566,11 +2569,11 @@ func (tools gccgoToolchain) asm(b *builder, p *Package, obj, ofile, sfile string
 	sfile = mkAbs(p.Dir, sfile)
 	defs := []string{"-D", "GOOS_" + goos, "-D", "GOARCH_" + goarch}
 	if pkgpath := gccgoCleanPkgpath(p); pkgpath != "" {
-		defs = append(defs, `-D`, `GOPKGPATH="`+pkgpath+`"`)
+		defs = append(defs, `-D`, `GOPKGPATH=`+pkgpath)
 	}
 	defs = tools.maybePIC(defs)
 	defs = append(defs, b.gccArchArgs()...)
-	return b.run(p.Dir, p.ImportPath, nil, tools.compiler(), "-I", obj, "-o", ofile, defs, sfile)
+	return b.run(p.Dir, p.ImportPath, nil, tools.compiler(), "-xassembler-with-cpp", "-I", obj, "-c", "-o", ofile, defs, sfile)
 }
 
 func (gccgoToolchain) pkgpath(basedir string, p *Package) string {
diff --git a/src/cmd/go/go_test.go b/src/cmd/go/go_test.go
index cc36b43..a901ca8 100644
--- a/src/cmd/go/go_test.go
+++ b/src/cmd/go/go_test.go
@@ -666,10 +666,41 @@ func TestGoBuildDashAInReleaseBranch(t *testing.T) {
 
 	tg := testgo(t)
 	defer tg.cleanup()
-	tg.run("install", "math") // should be up to date already but just in case
+	tg.run("install", "math", "net/http") // should be up to date already but just in case
 	tg.setenv("TESTGO_IS_GO_RELEASE", "1")
-	tg.run("build", "-v", "-a", "math")
-	tg.grepStderr("runtime", "testgo build -a math in dev branch did not build runtime, but should have")
+	tg.run("install", "-v", "-a", "math")
+	tg.grepStderr("runtime", "testgo build -a math in release branch DID NOT build runtime, but should have")
+
+	// Now runtime.a is updated (newer mtime), so everything would look stale if not for being a release.
+	//
+	tg.run("build", "-v", "net/http")
+	tg.grepStderrNot("strconv", "testgo build -v net/http in release branch with newer runtime.a DID build strconv but should not have")
+	tg.grepStderrNot("golang.org/x/net/http2/hpack", "testgo build -v net/http in release branch with newer runtime.a DID build .../golang.org/x/net/http2/hpack but should not have")
+	tg.grepStderrNot("net/http", "testgo build -v net/http in release branch with newer runtime.a DID build net/http but should not have")
+}
+
+func TestGoListStandard(t *testing.T) {
+	tg := testgo(t)
+	defer tg.cleanup()
+	tg.cd(runtime.GOROOT() + "/src")
+	tg.run("list", "-f", "{{if not .Standard}}{{.ImportPath}}{{end}}", "./...")
+	stdout := tg.getStdout()
+	for _, line := range strings.Split(stdout, "\n") {
+		if strings.HasPrefix(line, "_/") && strings.HasSuffix(line, "/src") {
+			// $GOROOT/src shows up if there are any .go files there.
+			// We don't care.
+			continue
+		}
+		if line == "" {
+			continue
+		}
+		t.Errorf("package in GOROOT not listed as standard: %v", line)
+	}
+
+	// Similarly, expanding std should include some of our vendored code.
+	tg.run("list", "std", "cmd")
+	tg.grepStdout("golang.org/x/net/http2/hpack", "list std cmd did not mention vendored hpack")
+	tg.grepStdout("golang.org/x/arch/x86/x86asm", "list std cmd did not mention vendored x86asm")
 }
 
 func TestGoInstallCleansUpAfterGoBuild(t *testing.T) {
@@ -961,6 +992,16 @@ func TestInternalPackagesOutsideGOROOTAreRespected(t *testing.T) {
 	tg.grepBoth("use of internal package not allowed", "wrote error message for testdata/testinternal2")
 }
 
+func TestRunInternal(t *testing.T) {
+	tg := testgo(t)
+	defer tg.cleanup()
+	dir := filepath.Join(tg.pwd(), "testdata")
+	tg.setenv("GOPATH", dir)
+	tg.run("run", filepath.Join(dir, "src/run/good.go"))
+	tg.runFail("run", filepath.Join(dir, "src/run/bad.go"))
+	tg.grepStderr("use of internal package not allowed", "unexpected error for run/bad.go")
+}
+
 func testMove(t *testing.T, vcs, url, base, config string) {
 	testenv.MustHaveExternalNetwork(t)
 
@@ -2245,6 +2286,7 @@ func TestGoGetInsecureCustomDomain(t *testing.T) {
 }
 
 func TestIssue10193(t *testing.T) {
+	t.Skip("depends on code.google.com")
 	testenv.MustHaveExternalNetwork(t)
 	if _, err := exec.LookPath("hg"); err != nil {
 		t.Skip("skipping because hg binary not found")
diff --git a/src/cmd/go/list.go b/src/cmd/go/list.go
index 35c7cc4..8f741a6 100644
--- a/src/cmd/go/list.go
+++ b/src/cmd/go/list.go
@@ -78,6 +78,14 @@ syntax of package template.  The default output is equivalent to -f
         XTestImports []string // imports from XTestGoFiles
     }
 
+The error information, if any, is
+
+    type PackageError struct {
+        ImportStack   []string // shortest path from package named on command line to this one
+        Pos           string   // position of error (if present, file:line:col)
+        Err           string   // the error itself
+    }
+
 The template function "join" calls strings.Join.
 
 The template function "context" returns the build context, defined as:
diff --git a/src/cmd/go/main.go b/src/cmd/go/main.go
index c6d77f7..c8697ff 100644
--- a/src/cmd/go/main.go
+++ b/src/cmd/go/main.go
@@ -588,10 +588,9 @@ func matchPackages(pattern string) []string {
 			}
 
 			name := filepath.ToSlash(path[len(src):])
-			if pattern == "std" && (strings.Contains(name, ".") || name == "cmd") {
+			if pattern == "std" && (!isStandardImportPath(name) || name == "cmd") {
 				// The name "std" is only the standard library.
-				// If the name has a dot, assume it's a domain name for go get,
-				// and if the name is cmd, it's the root of the command tree.
+				// If the name is cmd, it's the root of the command tree.
 				return filepath.SkipDir
 			}
 			if !treeCanMatch(name) {
diff --git a/src/cmd/go/pkg.go b/src/cmd/go/pkg.go
index 7d2779e..112f820 100644
--- a/src/cmd/go/pkg.go
+++ b/src/cmd/go/pkg.go
@@ -153,7 +153,7 @@ func (p *Package) copyBuild(pp *build.Package) {
 	p.ConflictDir = pp.ConflictDir
 	// TODO? Target
 	p.Goroot = pp.Goroot
-	p.Standard = p.Goroot && p.ImportPath != "" && !strings.Contains(p.ImportPath, ".")
+	p.Standard = p.Goroot && p.ImportPath != "" && isStandardImportPath(p.ImportPath)
 	p.GoFiles = pp.GoFiles
 	p.CgoFiles = pp.CgoFiles
 	p.IgnoredGoFiles = pp.IgnoredGoFiles
@@ -177,6 +177,19 @@ func (p *Package) copyBuild(pp *build.Package) {
 	p.XTestImports = pp.XTestImports
 }
 
+// isStandardImportPath reports whether $GOROOT/src/path should be considered
+// part of the standard distribution. For historical reasons we allow people to add
+// their own code to $GOROOT instead of using $GOPATH, but we assume that
+// code will start with a domain name (dot in the first element).
+func isStandardImportPath(path string) bool {
+	i := strings.Index(path, "/")
+	if i < 0 {
+		i = len(path)
+	}
+	elem := path[:i]
+	return !strings.Contains(elem, ".")
+}
+
 // A PackageError describes an error loading information about a package.
 type PackageError struct {
 	ImportStack   []string // shortest path from package named on command line to this one
@@ -362,7 +375,7 @@ func loadImport(path, srcDir string, parent *Package, stk *importStack, importPo
 		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 {
+	if p.Error != nil && p.Error.Pos == "" && len(importPos) > 0 {
 		pos := importPos[0]
 		pos.Filename = shortPath(pos.Filename)
 		p.Error.Pos = pos.String()
@@ -420,7 +433,7 @@ func vendoredImportPath(parent *Package, path string) (found string) {
 			continue
 		}
 		targ := filepath.Join(dir[:i], vpath)
-		if isDir(targ) {
+		if isDir(targ) && hasGoFiles(targ) {
 			// We started with parent's dir c:\gopath\src\foo\bar\baz\quux\xyzzy.
 			// We know the import path for parent's dir.
 			// We chopped off some number of path elements and
@@ -443,6 +456,20 @@ func vendoredImportPath(parent *Package, path string) (found string) {
 	return path
 }
 
+// hasGoFiles reports whether dir contains any files with names ending in .go.
+// For a vendor check we must exclude directories that contain no .go files.
+// Otherwise it is not possible to vendor just a/b/c and still import the
+// non-vendored a/b. See golang.org/issue/13832.
+func hasGoFiles(dir string) bool {
+	fis, _ := ioutil.ReadDir(dir)
+	for _, fi := range fis {
+		if !fi.IsDir() && strings.HasSuffix(fi.Name(), ".go") {
+			return true
+		}
+	}
+	return false
+}
+
 // reusePackage reuses package p to satisfy the import at the top
 // of the import stack stk.  If this use causes an import loop,
 // reusePackage updates p's error information to record the loop.
@@ -502,7 +529,7 @@ func disallowInternal(srcDir string, p *Package, stk *importStack) *Package {
 		i-- // rewind over slash in ".../internal"
 	}
 	parent := p.Dir[:i+len(p.Dir)-len(p.ImportPath)]
-	if hasPathPrefix(filepath.ToSlash(srcDir), filepath.ToSlash(parent)) {
+	if hasFilePathPrefix(filepath.Clean(srcDir), filepath.Clean(parent)) {
 		return p
 	}
 
@@ -599,7 +626,7 @@ func disallowVendorVisibility(srcDir string, p *Package, stk *importStack) *Pack
 		return p
 	}
 	parent := p.Dir[:truncateTo]
-	if hasPathPrefix(filepath.ToSlash(srcDir), filepath.ToSlash(parent)) {
+	if hasFilePathPrefix(filepath.Clean(srcDir), filepath.Clean(parent)) {
 		return p
 	}
 
@@ -919,6 +946,17 @@ func (p *Package) load(stk *importStack, bp *build.Package, err error) *Package
 				}
 			}
 		}
+		if p.Standard && !p1.Standard && p.Error == nil {
+			p.Error = &PackageError{
+				ImportStack: stk.copy(),
+				Err:         fmt.Sprintf("non-standard import %q in standard package %q", path, p.ImportPath),
+			}
+			pos := p.build.ImportPos[path]
+			if len(pos) > 0 {
+				p.Error.Pos = pos[0].String()
+			}
+		}
+
 		path = p1.ImportPath
 		importPaths[i] = path
 		if i < len(p.Imports) {
diff --git a/src/cmd/go/run.go b/src/cmd/go/run.go
index 7ee067a..bf10f4f 100644
--- a/src/cmd/go/run.go
+++ b/src/cmd/go/run.go
@@ -89,8 +89,18 @@ func runRun(cmd *Command, args []string) {
 		fatalf("%s", p.Error)
 	}
 	p.omitDWARF = true
-	for _, err := range p.DepsErrors {
-		errorf("%s", err)
+	if len(p.DepsErrors) > 0 {
+		// Since these are errors in dependencies,
+		// the same error might show up multiple times,
+		// once in each package that depends on it.
+		// Only print each once.
+		printed := map[*PackageError]bool{}
+		for _, err := range p.DepsErrors {
+			if !printed[err] {
+				printed[err] = true
+				errorf("%s", err)
+			}
+		}
 	}
 	exitIfErrors()
 	if p.Name != "main" {
diff --git a/src/cmd/go/testdata/src/run/bad.go b/src/cmd/go/testdata/src/run/bad.go
new file mode 100644
index 0000000..c1cc3ac
--- /dev/null
+++ b/src/cmd/go/testdata/src/run/bad.go
@@ -0,0 +1,5 @@
+package main
+
+import _ "run/subdir/internal/private"
+
+func main() {}
diff --git a/src/cmd/go/testdata/src/run/good.go b/src/cmd/go/testdata/src/run/good.go
new file mode 100644
index 0000000..0b67dce
--- /dev/null
+++ b/src/cmd/go/testdata/src/run/good.go
@@ -0,0 +1,5 @@
+package main
+
+import _ "run/internal"
+
+func main() {}
diff --git a/src/cmd/go/testdata/src/run/internal/internal.go b/src/cmd/go/testdata/src/run/internal/internal.go
new file mode 100644
index 0000000..5bf0569
--- /dev/null
+++ b/src/cmd/go/testdata/src/run/internal/internal.go
@@ -0,0 +1 @@
+package internal
diff --git a/src/cmd/go/testdata/src/run/subdir/internal/private/private.go b/src/cmd/go/testdata/src/run/subdir/internal/private/private.go
new file mode 100644
index 0000000..735e4dc
--- /dev/null
+++ b/src/cmd/go/testdata/src/run/subdir/internal/private/private.go
@@ -0,0 +1 @@
+package private
diff --git a/src/cmd/go/testdata/src/vend/dir1/dir1.go b/src/cmd/go/testdata/src/vend/dir1/dir1.go
new file mode 100644
index 0000000..b719ead
--- /dev/null
+++ b/src/cmd/go/testdata/src/vend/dir1/dir1.go
@@ -0,0 +1 @@
+package dir1
diff --git a/src/cmd/go/testdata/src/vend/hello/hello_test.go b/src/cmd/go/testdata/src/vend/hello/hello_test.go
index 5e72ada..7190f59 100644
--- a/src/cmd/go/testdata/src/vend/hello/hello_test.go
+++ b/src/cmd/go/testdata/src/vend/hello/hello_test.go
@@ -7,6 +7,6 @@ import (
 
 func TestMsgInternal(t *testing.T) {
 	if strings.Msg != "hello, world" {
-		t.Fatal("unexpected msg: %v", strings.Msg)
+		t.Fatalf("unexpected msg: %v", strings.Msg)
 	}
 }
diff --git a/src/cmd/go/testdata/src/vend/hello/hellox_test.go b/src/cmd/go/testdata/src/vend/hello/hellox_test.go
index 96e6049..3f2165b 100644
--- a/src/cmd/go/testdata/src/vend/hello/hellox_test.go
+++ b/src/cmd/go/testdata/src/vend/hello/hellox_test.go
@@ -7,6 +7,6 @@ import (
 
 func TestMsgExternal(t *testing.T) {
 	if strings.Msg != "hello, world" {
-		t.Fatal("unexpected msg: %v", strings.Msg)
+		t.Fatalf("unexpected msg: %v", strings.Msg)
 	}
 }
diff --git a/src/cmd/go/testdata/src/vend/vendor/vend/dir1/dir2/dir2.go b/src/cmd/go/testdata/src/vend/vendor/vend/dir1/dir2/dir2.go
new file mode 100644
index 0000000..6fe35e9
--- /dev/null
+++ b/src/cmd/go/testdata/src/vend/vendor/vend/dir1/dir2/dir2.go
@@ -0,0 +1 @@
+package dir2
diff --git a/src/cmd/go/testdata/src/vend/x/x.go b/src/cmd/go/testdata/src/vend/x/x.go
index ae526eb..bdcde57 100644
--- a/src/cmd/go/testdata/src/vend/x/x.go
+++ b/src/cmd/go/testdata/src/vend/x/x.go
@@ -3,3 +3,5 @@ package x
 import _ "p"
 import _ "q"
 import _ "r"
+import _ "vend/dir1"      // not vendored
+import _ "vend/dir1/dir2" // vendored
diff --git a/src/cmd/go/vcs_test.go b/src/cmd/go/vcs_test.go
index f5d5e4f..a90c206 100644
--- a/src/cmd/go/vcs_test.go
+++ b/src/cmd/go/vcs_test.go
@@ -18,14 +18,14 @@ func TestRepoRootForImportPath(t *testing.T) {
 		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,
diff --git a/src/cmd/go/vendor_test.go b/src/cmd/go/vendor_test.go
index ed73be3..006a8c9 100644
--- a/src/cmd/go/vendor_test.go
+++ b/src/cmd/go/vendor_test.go
@@ -24,12 +24,14 @@ func TestVendorImports(t *testing.T) {
 	tg.run("list", "-f", "{{.ImportPath}} {{.Imports}}", "vend/...")
 	want := `
 		vend [vend/vendor/p r]
+		vend/dir1 []
 		vend/hello [fmt vend/vendor/strings]
 		vend/subdir [vend/vendor/p r]
 		vend/vendor/p []
 		vend/vendor/q []
 		vend/vendor/strings []
-		vend/x [vend/x/vendor/p vend/vendor/q vend/x/vendor/r]
+		vend/vendor/vend/dir1/dir2 []
+		vend/x [vend/x/vendor/p vend/vendor/q vend/x/vendor/r vend/dir1 vend/vendor/vend/dir1/dir2]
 		vend/x/invalid [vend/x/invalid/vendor/foo]
 		vend/x/vendor/p []
 		vend/x/vendor/p/p [notfound]
@@ -45,6 +47,14 @@ func TestVendorImports(t *testing.T) {
 	}
 }
 
+func TestVendorBuild(t *testing.T) {
+	tg := testgo(t)
+	defer tg.cleanup()
+	tg.setenv("GOPATH", filepath.Join(tg.pwd(), "testdata"))
+	tg.setenv("GO15VENDOREXPERIMENT", "1")
+	tg.run("build", "vend/x")
+}
+
 func TestVendorRun(t *testing.T) {
 	tg := testgo(t)
 	defer tg.cleanup()
diff --git a/src/cmd/internal/obj/arm/anames5.go b/src/cmd/internal/obj/arm/anames5.go
index e3f98ce..7fdd962 100644
--- a/src/cmd/internal/obj/arm/anames5.go
+++ b/src/cmd/internal/obj/arm/anames5.go
@@ -9,6 +9,7 @@ var cnames5 = []string{
 	"REG",
 	"REGREG",
 	"REGREG2",
+	"REGLIST",
 	"SHIFT",
 	"FREG",
 	"PSR",
diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go
index 3ba0c7d..d75a163 100644
--- a/src/cmd/internal/obj/arm/asm5.go
+++ b/src/cmd/internal/obj/arm/asm5.go
@@ -1561,7 +1561,7 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
 		o1 |= (uint32(p.To.Reg) & 15) << 12
 
 	case 5: /* bra s */
-		o1 = opbra(ctxt, int(p.As), int(p.Scond))
+		o1 = opbra(ctxt, p, int(p.As), int(p.Scond))
 
 		v := int32(-8)
 		if p.To.Sym != nil {
@@ -2594,9 +2594,9 @@ func oprrr(ctxt *obj.Link, a int, sc int) uint32 {
 	return 0
 }
 
-func opbra(ctxt *obj.Link, a int, sc int) uint32 {
+func opbra(ctxt *obj.Link, p *obj.Prog, a int, sc int) uint32 {
 	if sc&(C_SBIT|C_PBIT|C_WBIT) != 0 {
-		ctxt.Diag(".nil/.nil/.W on bra instruction")
+		ctxt.Diag("%v: .nil/.nil/.W on bra instruction", p)
 	}
 	sc &= C_SCOND
 	sc ^= C_SCOND_XOR
@@ -2604,7 +2604,7 @@ func opbra(ctxt *obj.Link, a int, sc int) uint32 {
 		return uint32(sc)<<28 | 0x5<<25 | 0x1<<24
 	}
 	if sc != 0xe {
-		ctxt.Diag(".COND on bcond instruction")
+		ctxt.Diag("%v: .COND on bcond instruction", p)
 	}
 	switch a {
 	case ABEQ:
@@ -2737,7 +2737,7 @@ func olhrr(ctxt *obj.Link, i int, b int, r int, sc int) uint32 {
 
 func ofsr(ctxt *obj.Link, a int, r int, v int32, b int, sc int, p *obj.Prog) uint32 {
 	if sc&C_SBIT != 0 {
-		ctxt.Diag(".nil on FLDR/FSTR instruction")
+		ctxt.Diag(".nil on FLDR/FSTR instruction: %v", p)
 	}
 	o := ((uint32(sc) & C_SCOND) ^ C_SCOND_XOR) << 28
 	if sc&C_PBIT == 0 {
diff --git a/src/cmd/internal/obj/arm64/a.out.go b/src/cmd/internal/obj/arm64/a.out.go
index d3e1e5e..f459483 100644
--- a/src/cmd/internal/obj/arm64/a.out.go
+++ b/src/cmd/internal/obj/arm64/a.out.go
@@ -655,15 +655,8 @@ const (
 	AUCVTFS
 	AUCVTFWD
 	AUCVTFWS
-	AHISTORY
-	ANAME
 	AWORD
-	ADYNT
-	AINIT
 	ADWORD
-	ASIGNAME
-	AGOK
-	AEND
 	AFCSELS
 	AFCSELD
 	AFMAXS
diff --git a/src/cmd/internal/obj/arm64/anames.go b/src/cmd/internal/obj/arm64/anames.go
index 486d469..4ee4043 100644
--- a/src/cmd/internal/obj/arm64/anames.go
+++ b/src/cmd/internal/obj/arm64/anames.go
@@ -312,15 +312,8 @@ var Anames = []string{
 	"UCVTFS",
 	"UCVTFWD",
 	"UCVTFWS",
-	"HISTORY",
-	"NAME",
 	"WORD",
-	"DYNT",
-	"INIT",
 	"DWORD",
-	"SIGNAME",
-	"GOK",
-	"END",
 	"FCSELS",
 	"FCSELD",
 	"FMAXS",
diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go
index dca7a7f..162acd2 100644
--- a/src/cmd/internal/obj/arm64/asm7.go
+++ b/src/cmd/internal/obj/arm64/asm7.go
@@ -693,7 +693,7 @@ func flushpool(ctxt *obj.Link, p *obj.Prog, skip int) {
 			q.Link = ctxt.Blitrl
 			q.Lineno = p.Lineno
 			ctxt.Blitrl = q
-		} else if p.Pc+int64(pool.size)-int64(pool.start) < 1024*1024 {
+		} else if p.Pc+int64(pool.size)-int64(pool.start) < maxPCDisp {
 			return
 		}
 
@@ -826,9 +826,15 @@ func regoff(ctxt *obj.Link, a *obj.Addr) uint32 {
 	return uint32(ctxt.Instoffset)
 }
 
+// Maximum PC-relative displacement.
+// The actual limit is ±2²⁰, but we are conservative
+// to avoid needing to recompute the literal pool flush points
+// as span-dependent jumps are enlarged.
+const maxPCDisp = 512 * 1024
+
+// ispcdisp reports whether v is a valid PC-relative displacement.
 func ispcdisp(v int32) bool {
-	/* pc-relative addressing will reach? */
-	return v >= -0xfffff && v <= 0xfffff && (v&3) == 0
+	return -maxPCDisp < v && v < maxPCDisp && v&3 == 0
 }
 
 func isaddcon(v int64) bool {
@@ -3654,7 +3660,8 @@ func brdist(ctxt *obj.Link, p *obj.Prog, preshift int, flen int, shift int) int6
 		v >>= uint(shift)
 		t = int64(1) << uint(flen-1)
 		if v < -t || v >= t {
-			ctxt.Diag("branch too far\n%v", p)
+			ctxt.Diag("branch too far %#x vs %#x [%p]\n%v\n%v", v, t, ctxt.Blitrl, p, p.Pcond)
+			panic("branch too far")
 		}
 	}
 
diff --git a/src/cmd/internal/obj/link.go b/src/cmd/internal/obj/link.go
index 511e409..762a49e 100644
--- a/src/cmd/internal/obj/link.go
+++ b/src/cmd/internal/obj/link.go
@@ -282,6 +282,7 @@ const (
 	AUSEFIELD
 	AVARDEF
 	AVARKILL
+	AVARLIVE
 	A_ARCHSPECIFIC
 )
 
@@ -603,12 +604,24 @@ type Link struct {
 	Autosize           int32
 	Armsize            int32
 	Pc                 int64
-	Diag               func(string, ...interface{})
+	DiagFunc           func(string, ...interface{})
 	Mode               int
 	Cursym             *LSym
 	Version            int
 	Textp              *LSym
 	Etextp             *LSym
+	Errors             int
+
+	// state for writing objects
+	Text  *LSym
+	Data  *LSym
+	Etext *LSym
+	Edata *LSym
+}
+
+func (ctxt *Link) Diag(format string, args ...interface{}) {
+	ctxt.Errors++
+	ctxt.DiagFunc(format, args...)
 }
 
 // The smallest possible offset from the hardware stack pointer to a local
diff --git a/src/cmd/internal/obj/mips/a.out.go b/src/cmd/internal/obj/mips/a.out.go
index f271a87..282cb79 100644
--- a/src/cmd/internal/obj/mips/a.out.go
+++ b/src/cmd/internal/obj/mips/a.out.go
@@ -114,7 +114,7 @@ const (
 	REG_LO
 
 	// co-processor 0 control registers
-	REG_M0 = obj.RBaseMIPS64 + 1024 + iota
+	REG_M0
 	REG_M1
 	REG_M2
 	REG_M3
@@ -148,7 +148,7 @@ const (
 	REG_M31
 
 	// FPU control registers
-	REG_FCR0 = obj.RBaseMIPS64 + 2048 + iota
+	REG_FCR0
 	REG_FCR1
 	REG_FCR2
 	REG_FCR3
@@ -181,6 +181,8 @@ const (
 	REG_FCR30
 	REG_FCR31
 
+	REG_LAST = REG_FCR31 // the last defined register
+
 	REG_SPECIAL = REG_M0
 
 	REGZERO  = REG_R0 /* set to zero */
diff --git a/src/cmd/internal/obj/mips/list0.go b/src/cmd/internal/obj/mips/list0.go
index 0807a62..40dc460 100644
--- a/src/cmd/internal/obj/mips/list0.go
+++ b/src/cmd/internal/obj/mips/list0.go
@@ -35,7 +35,7 @@ import (
 )
 
 func init() {
-	obj.RegisterRegister(obj.RBaseMIPS64, REG_FCR0+1024, Rconv)
+	obj.RegisterRegister(obj.RBaseMIPS64, REG_LAST&^1023+1024, Rconv)
 	obj.RegisterOpcode(obj.ABaseMIPS64, Anames)
 }
 
diff --git a/src/cmd/internal/obj/objfile.go b/src/cmd/internal/obj/objfile.go
index 13930aa..8d4a506 100644
--- a/src/cmd/internal/obj/objfile.go
+++ b/src/cmd/internal/obj/objfile.go
@@ -111,6 +111,11 @@ import (
 // out a Go object file.  The linker does not call this; the linker
 // does not write out object files.
 func Writeobjdirect(ctxt *Link, b *Biobuf) {
+	Flushplist(ctxt)
+	Writeobjfile(ctxt, b)
+}
+
+func Flushplist(ctxt *Link) {
 	var flag int
 	var s *LSym
 	var p *Prog
@@ -119,13 +124,11 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
 
 	// Build list of symbols, and assign instructions to lists.
 	// Ignore ctxt->plist boundaries. There are no guarantees there,
-	// and the C compilers and assemblers just use one big list.
-	var text *LSym
-
+	// and the assemblers just use one big list.
 	var curtext *LSym
-	var data *LSym
+	var text *LSym
 	var etext *LSym
-	var edata *LSym
+
 	for pl := ctxt.Plist; pl != nil; pl = pl.Link {
 		for p = pl.Firstpc; p != nil; p = plink {
 			if ctxt.Debugasm != 0 && ctxt.Debugvlog != 0 {
@@ -174,10 +177,10 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
 					log.Fatalf("symbol %s listed multiple times", s.Name)
 				}
 				s.Onlist = 1
-				if data == nil {
-					data = s
+				if ctxt.Data == nil {
+					ctxt.Data = s
 				} else {
-					edata.Next = s
+					ctxt.Edata.Next = s
 				}
 				s.Next = nil
 				s.Size = p.To.Offset
@@ -195,7 +198,7 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
 				} else if flag&TLSBSS != 0 {
 					s.Type = STLSBSS
 				}
-				edata = s
+				ctxt.Edata = s
 				continue
 			}
 
@@ -298,6 +301,17 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
 		linkpcln(ctxt, s)
 	}
 
+	// Add to running list in ctxt.
+	if ctxt.Etext == nil {
+		ctxt.Text = text
+	} else {
+		ctxt.Etext.Next = text
+	}
+	ctxt.Etext = etext
+	ctxt.Plist = nil
+}
+
+func Writeobjfile(ctxt *Link, b *Biobuf) {
 	// Emit header.
 	Bputc(b, 0)
 
@@ -312,10 +326,10 @@ func Writeobjdirect(ctxt *Link, b *Biobuf) {
 	wrstring(b, "")
 
 	// Emit symbols.
-	for s := text; s != nil; s = s.Next {
+	for s := ctxt.Text; s != nil; s = s.Next {
 		writesym(ctxt, b, s)
 	}
-	for s := data; s != nil; s = s.Next {
+	for s := ctxt.Data; s != nil; s = s.Next {
 		writesym(ctxt, b, s)
 	}
 
diff --git a/src/cmd/internal/obj/util.go b/src/cmd/internal/obj/util.go
index 3e29b58..5103299 100644
--- a/src/cmd/internal/obj/util.go
+++ b/src/cmd/internal/obj/util.go
@@ -529,7 +529,7 @@ const (
 	RBaseARM    = 3 * 1024
 	RBasePPC64  = 4 * 1024  // range [4k, 8k)
 	RBaseARM64  = 8 * 1024  // range [8k, 13k)
-	RBaseMIPS64 = 13 * 1024 // range [13k, 16k)
+	RBaseMIPS64 = 13 * 1024 // range [13k, 14k)
 )
 
 // RegisterRegister binds a pretty-printer (Rconv) for register
@@ -608,7 +608,7 @@ func RegisterOpcode(lo int, Anames []string) {
 }
 
 func Aconv(a int) string {
-	if a < A_ARCHSPECIFIC {
+	if 0 <= a && a < len(Anames) {
 		return Anames[a]
 	}
 	for i := range aSpace {
@@ -640,6 +640,7 @@ var Anames = []string{
 	"USEFIELD",
 	"VARDEF",
 	"VARKILL",
+	"VARLIVE",
 }
 
 func Bool2int(b bool) int {
diff --git a/src/cmd/internal/obj/x86/a.out.go b/src/cmd/internal/obj/x86/a.out.go
index b3e2d48..12eaa90 100644
--- a/src/cmd/internal/obj/x86/a.out.go
+++ b/src/cmd/internal/obj/x86/a.out.go
@@ -89,7 +89,11 @@ const (
 	ADIVL
 	ADIVW
 	AENTER
+	AHADDPD
+	AHADDPS
 	AHLT
+	AHSUBPD
+	AHSUBPS
 	AIDIVB
 	AIDIVL
 	AIDIVW
@@ -181,7 +185,9 @@ const (
 	APAUSE
 	APOPAL
 	APOPAW
-	APOPCNT
+	APOPCNTW
+	APOPCNTL
+	APOPCNTQ
 	APOPFL
 	APOPFW
 	APOPL
@@ -508,10 +514,22 @@ const (
 	AADDPS
 	AADDSD
 	AADDSS
+	AANDNL
+	AANDNQ
 	AANDNPD
 	AANDNPS
 	AANDPD
 	AANDPS
+	ABEXTRL
+	ABEXTRQ
+	ABLSIL
+	ABLSIQ
+	ABLSMSKL
+	ABLSMSKQ
+	ABLSRL
+	ABLSRQ
+	ABZHIL
+	ABZHIQ
 	ACMPPD
 	ACMPPS
 	ACMPSD
@@ -549,6 +567,7 @@ const (
 	AFXRSTOR64
 	AFXSAVE
 	AFXSAVE64
+	ALDDQU
 	ALDMXCSR
 	AMASKMOVOU
 	AMASKMOVQ
@@ -585,6 +604,8 @@ const (
 	AMULPS
 	AMULSD
 	AMULSS
+	AMULXL
+	AMULXQ
 	AORPD
 	AORPS
 	APACKSSLW
@@ -598,15 +619,15 @@ const (
 	APADDUSB
 	APADDUSW
 	APADDW
+	APAND
 	APANDB
 	APANDL
+	APANDN
 	APANDSB
 	APANDSW
 	APANDUSB
 	APANDUSW
 	APANDW
-	APAND
-	APANDN
 	APAVGB
 	APAVGW
 	APCMPEQB
@@ -615,10 +636,14 @@ const (
 	APCMPGTB
 	APCMPGTL
 	APCMPGTW
-	APEXTRW
+	APDEPL
+	APDEPQ
+	APEXTL
+	APEXTQ
 	APEXTRB
 	APEXTRD
 	APEXTRQ
+	APEXTRW
 	APFACC
 	APFADD
 	APFCMPEQ
@@ -630,42 +655,63 @@ const (
 	APFNACC
 	APFPNACC
 	APFRCP
-	APFRCPIT1
 	APFRCPI2T
+	APFRCPIT1
 	APFRSQIT1
 	APFRSQRT
 	APFSUB
 	APFSUBR
-	APINSRW
+	APHADDD
+	APHADDSW
+	APHADDW
+	APHMINPOSUW
+	APHSUBD
+	APHSUBSW
+	APHSUBW
 	APINSRB
 	APINSRD
 	APINSRQ
+	APINSRW
 	APMADDWL
 	APMAXSW
 	APMAXUB
 	APMINSW
 	APMINUB
 	APMOVMSKB
+	APMOVSXBD
+	APMOVSXBQ
+	APMOVSXBW
+	APMOVSXDQ
+	APMOVSXWD
+	APMOVSXWQ
+	APMOVZXBD
+	APMOVZXBQ
+	APMOVZXBW
+	APMOVZXDQ
+	APMOVZXWD
+	APMOVZXWQ
+	APMULDQ
 	APMULHRW
 	APMULHUW
 	APMULHW
+	APMULLD
 	APMULLW
 	APMULULQ
 	APOR
 	APSADBW
+	APSHUFB
 	APSHUFHW
 	APSHUFL
 	APSHUFLW
 	APSHUFW
-	APSHUFB
-	APSLLO
 	APSLLL
+	APSLLO
 	APSLLQ
 	APSLLW
 	APSRAL
 	APSRAW
-	APSRLO
 	APSRLL
+	APSRLO
 	APSRLQ
 	APSRLW
 	APSUBB
@@ -690,6 +736,12 @@ const (
 	ARCPSS
 	ARSQRTPS
 	ARSQRTSS
+	ASARXL
+	ASARXQ
+	ASHLXL
+	ASHLXQ
+	ASHRXL
+	ASHRXQ
 	ASHUFPD
 	ASHUFPS
 	ASQRTPD
@@ -749,9 +801,9 @@ const (
 	APCLMULQDQ
 
 	AVZEROUPPER
-	AMOVHDU
-	AMOVNTHD
-	AMOVHDA
+	AVMOVDQU
+	AVMOVNTDQ
+	AVMOVDQA
 	AVPCMPEQB
 	AVPXOR
 	AVPMOVMSKB
@@ -864,6 +916,23 @@ const (
 	REG_X14
 	REG_X15
 
+	REG_Y0
+	REG_Y1
+	REG_Y2
+	REG_Y3
+	REG_Y4
+	REG_Y5
+	REG_Y6
+	REG_Y7
+	REG_Y8
+	REG_Y9
+	REG_Y10
+	REG_Y11
+	REG_Y12
+	REG_Y13
+	REG_Y14
+	REG_Y15
+
 	REG_CS
 	REG_SS
 	REG_DS
diff --git a/src/cmd/internal/obj/x86/anames.go b/src/cmd/internal/obj/x86/anames.go
index 392899c..1875eae 100644
--- a/src/cmd/internal/obj/x86/anames.go
+++ b/src/cmd/internal/obj/x86/anames.go
@@ -57,7 +57,11 @@ var Anames = []string{
 	"DIVL",
 	"DIVW",
 	"ENTER",
+	"HADDPD",
+	"HADDPS",
 	"HLT",
+	"HSUBPD",
+	"HSUBPS",
 	"IDIVB",
 	"IDIVL",
 	"IDIVW",
@@ -149,7 +153,9 @@ var Anames = []string{
 	"PAUSE",
 	"POPAL",
 	"POPAW",
-	"POPCNT",
+	"POPCNTW",
+	"POPCNTL",
+	"POPCNTQ",
 	"POPFL",
 	"POPFW",
 	"POPL",
@@ -457,10 +463,22 @@ var Anames = []string{
 	"ADDPS",
 	"ADDSD",
 	"ADDSS",
+	"ANDNL",
+	"ANDNQ",
 	"ANDNPD",
 	"ANDNPS",
 	"ANDPD",
 	"ANDPS",
+	"BEXTRL",
+	"BEXTRQ",
+	"BLSIL",
+	"BLSIQ",
+	"BLSMSKL",
+	"BLSMSKQ",
+	"BLSRL",
+	"BLSRQ",
+	"BZHIL",
+	"BZHIQ",
 	"CMPPD",
 	"CMPPS",
 	"CMPSD",
@@ -498,6 +516,7 @@ var Anames = []string{
 	"FXRSTOR64",
 	"FXSAVE",
 	"FXSAVE64",
+	"LDDQU",
 	"LDMXCSR",
 	"MASKMOVOU",
 	"MASKMOVQ",
@@ -534,6 +553,8 @@ var Anames = []string{
 	"MULPS",
 	"MULSD",
 	"MULSS",
+	"MULXL",
+	"MULXQ",
 	"ORPD",
 	"ORPS",
 	"PACKSSLW",
@@ -547,15 +568,15 @@ var Anames = []string{
 	"PADDUSB",
 	"PADDUSW",
 	"PADDW",
+	"PAND",
 	"PANDB",
 	"PANDL",
+	"PANDN",
 	"PANDSB",
 	"PANDSW",
 	"PANDUSB",
 	"PANDUSW",
 	"PANDW",
-	"PAND",
-	"PANDN",
 	"PAVGB",
 	"PAVGW",
 	"PCMPEQB",
@@ -564,10 +585,14 @@ var Anames = []string{
 	"PCMPGTB",
 	"PCMPGTL",
 	"PCMPGTW",
-	"PEXTRW",
+	"PDEPL",
+	"PDEPQ",
+	"PEXTL",
+	"PEXTQ",
 	"PEXTRB",
 	"PEXTRD",
 	"PEXTRQ",
+	"PEXTRW",
 	"PFACC",
 	"PFADD",
 	"PFCMPEQ",
@@ -579,42 +604,63 @@ var Anames = []string{
 	"PFNACC",
 	"PFPNACC",
 	"PFRCP",
-	"PFRCPIT1",
 	"PFRCPI2T",
+	"PFRCPIT1",
 	"PFRSQIT1",
 	"PFRSQRT",
 	"PFSUB",
 	"PFSUBR",
-	"PINSRW",
+	"PHADDD",
+	"PHADDSW",
+	"PHADDW",
+	"PHMINPOSUW",
+	"PHSUBD",
+	"PHSUBSW",
+	"PHSUBW",
 	"PINSRB",
 	"PINSRD",
 	"PINSRQ",
+	"PINSRW",
 	"PMADDWL",
 	"PMAXSW",
 	"PMAXUB",
 	"PMINSW",
 	"PMINUB",
 	"PMOVMSKB",
+	"PMOVSXBD",
+	"PMOVSXBQ",
+	"PMOVSXBW",
+	"PMOVSXDQ",
+	"PMOVSXWD",
+	"PMOVSXWQ",
+	"PMOVZXBD",
+	"PMOVZXBQ",
+	"PMOVZXBW",
+	"PMOVZXDQ",
+	"PMOVZXWD",
+	"PMOVZXWQ",
+	"PMULDQ",
 	"PMULHRW",
 	"PMULHUW",
 	"PMULHW",
+	"PMULLD",
 	"PMULLW",
 	"PMULULQ",
 	"POR",
 	"PSADBW",
+	"PSHUFB",
 	"PSHUFHW",
 	"PSHUFL",
 	"PSHUFLW",
 	"PSHUFW",
-	"PSHUFB",
-	"PSLLO",
 	"PSLLL",
+	"PSLLO",
 	"PSLLQ",
 	"PSLLW",
 	"PSRAL",
 	"PSRAW",
-	"PSRLO",
 	"PSRLL",
+	"PSRLO",
 	"PSRLQ",
 	"PSRLW",
 	"PSUBB",
@@ -639,6 +685,12 @@ var Anames = []string{
 	"RCPSS",
 	"RSQRTPS",
 	"RSQRTSS",
+	"SARXL",
+	"SARXQ",
+	"SHLXL",
+	"SHLXQ",
+	"SHRXL",
+	"SHRXQ",
 	"SHUFPD",
 	"SHUFPS",
 	"SQRTPD",
@@ -690,9 +742,9 @@ var Anames = []string{
 	"PSHUFD",
 	"PCLMULQDQ",
 	"VZEROUPPER",
-	"MOVHDU",
-	"MOVNTHD",
-	"MOVHDA",
+	"VMOVDQU",
+	"VMOVNTDQ",
+	"VMOVDQA",
 	"VPCMPEQB",
 	"VPXOR",
 	"VPMOVMSKB",
diff --git a/src/cmd/internal/obj/x86/asm6.go b/src/cmd/internal/obj/x86/asm6.go
index 164dbd6..4ed1d87 100644
--- a/src/cmd/internal/obj/x86/asm6.go
+++ b/src/cmd/internal/obj/x86/asm6.go
@@ -148,6 +148,8 @@ const (
 	Ymm
 	Yxr
 	Yxm
+	Yyr
+	Yym
 	Ytls
 	Ytextsize
 	Yindir
@@ -181,7 +183,6 @@ const (
 	Zm_r
 	Zm2_r
 	Zm_r_xm
-	Zm_r_xm_vex
 	Zm_r_i_xm
 	Zm_r_3d
 	Zm_r_xm_nr
@@ -195,8 +196,6 @@ const (
 	Zpseudo
 	Zr_m
 	Zr_m_xm
-	Zr_m_xm_vex
-	Zr_r_r_vex
 	Zrp_
 	Z_ib
 	Z_il
@@ -206,29 +205,32 @@ const (
 	Zil_rr
 	Zclr
 	Zbyte
+	Zvex_rm_v_r
+	Zvex_r_v_rm
+	Zvex_v_rm_r
 	Zmax
 )
 
 const (
-	Px    = 0
-	Px1   = 1    // symbolic; exact value doesn't matter
-	P32   = 0x32 /* 32-bit only */
-	Pe    = 0x66 /* operand escape */
-	Pm    = 0x0f /* 2byte opcode escape */
-	Pq    = 0xff /* both escapes: 66 0f */
-	Pb    = 0xfe /* byte operands */
-	Pf2   = 0xf2 /* xmm escape 1: f2 0f */
-	Pf3   = 0xf3 /* xmm escape 2: f3 0f */
-	Pq3   = 0x67 /* xmm escape 3: 66 48 0f */
-	Pfw   = 0xf4 /* Pf3 with Rex.w: f3 48 0f */
-	Pvex1 = 0xc5 /* 66.0f escape, vex encoding */
-	Pvex2 = 0xc6 /* f3.0f escape, vex encoding */
-	Pvex3 = 0xc7 /* 66.0f38 escape, vex encoding */
-	Pw    = 0x48 /* Rex.w */
-	Pw8   = 0x90 // symbolic; exact value doesn't matter
-	Py    = 0x80 /* defaults to 64-bit mode */
-	Py1   = 0x81 // symbolic; exact value doesn't matter
-	Py3   = 0x83 // symbolic; exact value doesn't matter
+	Px   = 0
+	Px1  = 1    // symbolic; exact value doesn't matter
+	P32  = 0x32 /* 32-bit only */
+	Pe   = 0x66 /* operand escape */
+	Pm   = 0x0f /* 2byte opcode escape */
+	Pq   = 0xff /* both escapes: 66 0f */
+	Pb   = 0xfe /* byte operands */
+	Pf2  = 0xf2 /* xmm escape 1: f2 0f */
+	Pf3  = 0xf3 /* xmm escape 2: f3 0f */
+	Pef3 = 0xf5 /* xmm escape 2 with 16-bit prefix: 66 f3 0f */
+	Pq3  = 0x67 /* xmm escape 3: 66 48 0f */
+	Pq4  = 0x68 /* xmm escape 4: 66 0F 38 */
+	Pfw  = 0xf4 /* Pf3 with Rex.w: f3 48 0f */
+	Pw   = 0x48 /* Rex.w */
+	Pw8  = 0x90 // symbolic; exact value doesn't matter
+	Py   = 0x80 /* defaults to 64-bit mode */
+	Py1  = 0x81 // symbolic; exact value doesn't matter
+	Py3  = 0x83 // symbolic; exact value doesn't matter
+	Pvex = 0x84 // symbolic: exact value doesn't matter
 
 	Rxw = 1 << 3 /* =1, 64-bit operand size */
 	Rxr = 1 << 2 /* extend modrm reg */
@@ -236,6 +238,75 @@ const (
 	Rxb = 1 << 0 /* extend modrm r/m, sib base, or opcode reg */
 )
 
+const (
+	// Encoding for VEX prefix in tables.
+	// The P, L, and W fields are chosen to match
+	// their eventual locations in the VEX prefix bytes.
+
+	// P field - 2 bits
+	vex66 = 1 << 0
+	vexF3 = 2 << 0
+	vexF2 = 3 << 0
+	// L field - 1 bit
+	vexLZ  = 0 << 2
+	vexLIG = 0 << 2
+	vex128 = 0 << 2
+	vex256 = 1 << 2
+	// W field - 1 bit
+	vexWIG = 0 << 7
+	vexW0  = 0 << 7
+	vexW1  = 1 << 7
+	// M field - 5 bits, but mostly reserved; we can store up to 4
+	vex0F   = 1 << 3
+	vex0F38 = 2 << 3
+	vex0F3A = 3 << 3
+
+	// Combinations used in the manual.
+	VEX_128_0F_WIG      = vex128 | vex0F | vexWIG
+	VEX_128_66_0F_W0    = vex128 | vex66 | vex0F | vexW0
+	VEX_128_66_0F_W1    = vex128 | vex66 | vex0F | vexW1
+	VEX_128_66_0F_WIG   = vex128 | vex66 | vex0F | vexWIG
+	VEX_128_66_0F38_W0  = vex128 | vex66 | vex0F38 | vexW0
+	VEX_128_66_0F38_W1  = vex128 | vex66 | vex0F38 | vexW1
+	VEX_128_66_0F38_WIG = vex128 | vex66 | vex0F38 | vexWIG
+	VEX_128_66_0F3A_W0  = vex128 | vex66 | vex0F3A | vexW0
+	VEX_128_66_0F3A_W1  = vex128 | vex66 | vex0F3A | vexW1
+	VEX_128_66_0F3A_WIG = vex128 | vex66 | vex0F3A | vexWIG
+	VEX_128_F2_0F_WIG   = vex128 | vexF2 | vex0F | vexWIG
+	VEX_128_F3_0F_WIG   = vex128 | vexF3 | vex0F | vexWIG
+	VEX_256_66_0F_WIG   = vex256 | vex66 | vex0F | vexWIG
+	VEX_256_66_0F38_W0  = vex256 | vex66 | vex0F38 | vexW0
+	VEX_256_66_0F38_W1  = vex256 | vex66 | vex0F38 | vexW1
+	VEX_256_66_0F38_WIG = vex256 | vex66 | vex0F38 | vexWIG
+	VEX_256_66_0F3A_W0  = vex256 | vex66 | vex0F3A | vexW0
+	VEX_256_66_0F3A_W1  = vex256 | vex66 | vex0F3A | vexW1
+	VEX_256_66_0F3A_WIG = vex256 | vex66 | vex0F3A | vexWIG
+	VEX_256_F2_0F_WIG   = vex256 | vexF2 | vex0F | vexWIG
+	VEX_256_F3_0F_WIG   = vex256 | vexF3 | vex0F | vexWIG
+	VEX_LIG_0F_WIG      = vexLIG | vex0F | vexWIG
+	VEX_LIG_66_0F_WIG   = vexLIG | vex66 | vex0F | vexWIG
+	VEX_LIG_66_0F38_W0  = vexLIG | vex66 | vex0F38 | vexW0
+	VEX_LIG_66_0F38_W1  = vexLIG | vex66 | vex0F38 | vexW1
+	VEX_LIG_66_0F3A_WIG = vexLIG | vex66 | vex0F3A | vexWIG
+	VEX_LIG_F2_0F_W0    = vexLIG | vexF2 | vex0F | vexW0
+	VEX_LIG_F2_0F_W1    = vexLIG | vexF2 | vex0F | vexW1
+	VEX_LIG_F2_0F_WIG   = vexLIG | vexF2 | vex0F | vexWIG
+	VEX_LIG_F3_0F_W0    = vexLIG | vexF3 | vex0F | vexW0
+	VEX_LIG_F3_0F_W1    = vexLIG | vexF3 | vex0F | vexW1
+	VEX_LIG_F3_0F_WIG   = vexLIG | vexF3 | vex0F | vexWIG
+	VEX_LZ_0F_WIG       = vexLZ | vex0F | vexWIG
+	VEX_LZ_0F38_W0      = vexLZ | vex0F38 | vexW0
+	VEX_LZ_0F38_W1      = vexLZ | vex0F38 | vexW1
+	VEX_LZ_66_0F38_W0   = vexLZ | vex66 | vex0F38 | vexW0
+	VEX_LZ_66_0F38_W1   = vexLZ | vex66 | vex0F38 | vexW1
+	VEX_LZ_F2_0F38_W0   = vexLZ | vexF2 | vex0F38 | vexW0
+	VEX_LZ_F2_0F38_W1   = vexLZ | vexF2 | vex0F38 | vexW1
+	VEX_LZ_F2_0F3A_W0   = vexLZ | vexF2 | vex0F3A | vexW0
+	VEX_LZ_F2_0F3A_W1   = vexLZ | vexF2 | vex0F3A | vexW1
+	VEX_LZ_F3_0F38_W0   = vexLZ | vexF3 | vex0F38 | vexW0
+	VEX_LZ_F3_0F38_W1   = vexLZ | vexF3 | vex0F38 | vexW1
+)
+
 var ycover [Ymax * Ymax]uint8
 
 var reg [MAXREG]int
@@ -606,6 +677,10 @@ var yxm = []ytab{
 	{Yxm, Ynone, Yxr, Zm_r_xm, 1},
 }
 
+var yxm_q4 = []ytab{
+	{Yxm, Ynone, Yxr, Zm_r, 1},
+}
+
 var yxcvm1 = []ytab{
 	{Yxm, Ynone, Yxr, Zm_r_xm, 2},
 	{Yxm, Ynone, Ymr, Zm_r_xm, 2},
@@ -630,20 +705,6 @@ var yxr_ml = []ytab{
 	{Yxr, Ynone, Yml, Zr_m_xm, 1},
 }
 
-var yxr_ml_vex = []ytab{
-	{Yxr, Ynone, Yml, Zr_m_xm_vex, 1},
-}
-
-var yml_xr_vex = []ytab{
-	{Yml, Ynone, Yxr, Zm_r_xm_vex, 1},
-	{Yxr, Ynone, Yxr, Zm_r_xm_vex, 1},
-}
-
-var yxm_xm_xm = []ytab{
-	{Yxr, Yxr, Yxr, Zr_r_r_vex, 1},
-	{Yxm, Yxr, Yxr, Zr_r_r_vex, 1},
-}
-
 var ymr = []ytab{
 	{Ymr, Ynone, Ymr, Zm_r, 1},
 }
@@ -660,11 +721,6 @@ var yxcmpi = []ytab{
 	{Yxm, Yxr, Yi8, Zm_r_i_xm, 2},
 }
 
-var yxmov_vex = []ytab{
-	{Yxm, Ynone, Yxr, Zm_r_xm_vex, 1},
-	{Yxr, Ynone, Yxm, Zr_m_xm_vex, 1},
-}
-
 var yxmov = []ytab{
 	{Yxm, Ynone, Yxr, Zm_r_xm, 1},
 	{Yxr, Ynone, Yxm, Zr_m_xm, 1},
@@ -743,10 +799,6 @@ var ymskb = []ytab{
 	{Ymr, Ynone, Yrl, Zm_r_xm, 1},
 }
 
-var ymskb_vex = []ytab{
-	{Yxr, Ynone, Yrl, Zm_r_xm_vex, 2},
-}
-
 var ycrc32l = []ytab{
 	{Yml, Ynone, Yrl, Zlitm_r, 0},
 }
@@ -771,6 +823,81 @@ var yxabort = []ytab{
 	{Yu8, Ynone, Ynone, Zib_, 1},
 }
 
+var ylddqu = []ytab{
+	{Ym, Ynone, Yxr, Zm_r, 1},
+}
+
+// VEX instructions that come in two forms:
+//	VTHING xmm2/m128, xmmV, xmm1
+//	VTHING ymm2/m256, ymmV, ymm1
+// The opcode array in the corresponding Optab entry
+// should contain the (VEX prefixes, opcode byte) pair
+// for each of the two forms.
+// For example, the entries for VPXOR are:
+//
+//	VPXOR xmm2/m128, xmmV, xmm1
+//	VEX.NDS.128.66.0F.WIG EF /r
+//
+//	VPXOR ymm2/m256, ymmV, ymm1
+//	VEX.NDS.256.66.0F.WIG EF /r
+//
+// The NDS/NDD/DDS part can be dropped, producing this
+// Optab entry:
+//
+//	{AVPXOR, yvex_xy3, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0xEF, VEX_256_66_0F_WIG, 0xEF}}
+//
+var yvex_xy3 = []ytab{
+	{Yxm, Yxr, Yxr, Zvex_rm_v_r, 2},
+	{Yym, Yyr, Yyr, Zvex_rm_v_r, 2},
+}
+
+var yvex_r3 = []ytab{
+	{Yml, Yrl, Yrl, Zvex_rm_v_r, 2},
+	{Yml, Yrl, Yrl, Zvex_rm_v_r, 2},
+}
+
+var yvex_vmr3 = []ytab{
+	{Yrl, Yml, Yrl, Zvex_v_rm_r, 2},
+	{Yrl, Yml, Yrl, Zvex_v_rm_r, 2},
+}
+
+var yvex_xy2 = []ytab{
+	{Yxm, Ynone, Yxr, Zvex_rm_v_r, 2},
+	{Yym, Ynone, Yyr, Zvex_rm_v_r, 2},
+}
+
+var yvex_xyr2 = []ytab{
+	{Yxr, Ynone, Yrl, Zvex_rm_v_r, 2},
+	{Yyr, Ynone, Yrl, Zvex_rm_v_r, 2},
+}
+
+var yvex_vmovdqa = []ytab{
+	{Yxm, Ynone, Yxr, Zvex_rm_v_r, 2},
+	{Yxr, Ynone, Yxm, Zvex_r_v_rm, 2},
+	{Yym, Ynone, Yyr, Zvex_rm_v_r, 2},
+	{Yyr, Ynone, Yym, Zvex_r_v_rm, 2},
+}
+
+var yvex_vmovntdq = []ytab{
+	{Yxr, Ynone, Ym, Zvex_r_v_rm, 2},
+	{Yyr, Ynone, Ym, Zvex_r_v_rm, 2},
+}
+
+var yvex_vpbroadcast = []ytab{
+	{Yxm, Ynone, Yxr, Zvex_rm_v_r, 2},
+	{Yxm, Ynone, Yyr, Zvex_rm_v_r, 2},
+}
+
+var yvex_xxmyxm = []ytab{
+	{Yxr, Ynone, Yxm, Zvex_r_v_rm, 2},
+	{Yyr, Ynone, Yxm, Zvex_r_v_rm, 2},
+}
+
+var ymmxmm0f38 = []ytab{
+	{Ymm, Ynone, Ymr, Zlitm_r, 3},
+	{Yxm, Ynone, Yxr, Zlitm_r, 5},
+}
+
 /*
  * You are doasm, holding in your hand a Prog* with p->as set to, say, ACRC32,
  * and p->from and p->to as operands (Addr*).  The linker scans optab to find
@@ -1044,9 +1171,14 @@ var optab =
 	{AJPC, yjcond, Px, [23]uint8{0x7b, 0x8b}},
 	{AJPL, yjcond, Px, [23]uint8{0x79, 0x89}},
 	{AJPS, yjcond, Px, [23]uint8{0x7a, 0x8a}},
+	{AHADDPD, yxm, Pq, [23]uint8{0x7c}},
+	{AHADDPS, yxm, Pf2, [23]uint8{0x7c}},
+	{AHSUBPD, yxm, Pq, [23]uint8{0x7d}},
+	{AHSUBPS, yxm, Pf2, [23]uint8{0x7d}},
 	{ALAHF, ynone, Px, [23]uint8{0x9f}},
 	{ALARL, yml_rl, Pm, [23]uint8{0x02}},
 	{ALARW, yml_rl, Pq, [23]uint8{0x02}},
+	{ALDDQU, ylddqu, Pf2, [23]uint8{0xf0}},
 	{ALDMXCSR, ysvrs, Pm, [23]uint8{0xae, 02, 0xae, 02}},
 	{ALEAL, ym_rl, Px, [23]uint8{0x8d}},
 	{ALEAQ, ym_rl, Pw, [23]uint8{0x8d}},
@@ -1191,6 +1323,13 @@ var optab =
 	{APFRSQRT, ymfp, Px, [23]uint8{0x97}},
 	{APFSUB, ymfp, Px, [23]uint8{0x9a}},
 	{APFSUBR, ymfp, Px, [23]uint8{0xaa}},
+	{APHADDD, ymmxmm0f38, Px, [23]uint8{0x0F, 0x38, 0x02, 0, 0x66, 0x0F, 0x38, 0x02, 0}},
+	{APHADDSW, yxm_q4, Pq4, [23]uint8{0x03}},
+	{APHADDW, yxm_q4, Pq4, [23]uint8{0x01}},
+	{APHMINPOSUW, yxm_q4, Pq4, [23]uint8{0x41}},
+	{APHSUBD, yxm_q4, Pq4, [23]uint8{0x06}},
+	{APHSUBSW, yxm_q4, Pq4, [23]uint8{0x07}},
+	{APHSUBW, yxm_q4, Pq4, [23]uint8{0x05}},
 	{APINSRW, yinsrw, Pq, [23]uint8{0xc4, 00}},
 	{APINSRB, yinsr, Pq, [23]uint8{0x3a, 0x20, 00}},
 	{APINSRD, yinsr, Pq, [23]uint8{0x3a, 0x22, 00}},
@@ -1201,14 +1340,30 @@ var optab =
 	{APMINSW, yxm, Pe, [23]uint8{0xea}},
 	{APMINUB, yxm, Pe, [23]uint8{0xda}},
 	{APMOVMSKB, ymskb, Px, [23]uint8{Pe, 0xd7, 0xd7}},
+	{APMOVSXBD, yxm_q4, Pq4, [23]uint8{0x21}},
+	{APMOVSXBQ, yxm_q4, Pq4, [23]uint8{0x22}},
+	{APMOVSXBW, yxm_q4, Pq4, [23]uint8{0x20}},
+	{APMOVSXDQ, yxm_q4, Pq4, [23]uint8{0x25}},
+	{APMOVSXWD, yxm_q4, Pq4, [23]uint8{0x23}},
+	{APMOVSXWQ, yxm_q4, Pq4, [23]uint8{0x24}},
+	{APMOVZXBD, yxm_q4, Pq4, [23]uint8{0x31}},
+	{APMOVZXBQ, yxm_q4, Pq4, [23]uint8{0x32}},
+	{APMOVZXBW, yxm_q4, Pq4, [23]uint8{0x30}},
+	{APMOVZXDQ, yxm_q4, Pq4, [23]uint8{0x35}},
+	{APMOVZXWD, yxm_q4, Pq4, [23]uint8{0x33}},
+	{APMOVZXWQ, yxm_q4, Pq4, [23]uint8{0x34}},
+	{APMULDQ, yxm_q4, Pq4, [23]uint8{0x28}},
 	{APMULHRW, ymfp, Px, [23]uint8{0xb7}},
 	{APMULHUW, ymm, Py1, [23]uint8{0xe4, Pe, 0xe4}},
 	{APMULHW, ymm, Py1, [23]uint8{0xe5, Pe, 0xe5}},
+	{APMULLD, yxm_q4, Pq4, [23]uint8{0x40}},
 	{APMULLW, ymm, Py1, [23]uint8{0xd5, Pe, 0xd5}},
 	{APMULULQ, ymm, Py1, [23]uint8{0xf4, Pe, 0xf4}},
 	{APOPAL, ynone, P32, [23]uint8{0x61}},
 	{APOPAW, ynone, Pe, [23]uint8{0x61}},
-	{APOPCNT, yml_rl, Pfw, [23]uint8{0xb8}},
+	{APOPCNTW, yml_rl, Pef3, [23]uint8{0xb8}},
+	{APOPCNTL, yml_rl, Pf3, [23]uint8{0xb8}},
+	{APOPCNTQ, yml_rl, Pfw, [23]uint8{0xb8}},
 	{APOPFL, ynone, P32, [23]uint8{0x9d}},
 	{APOPFQ, ynone, Py, [23]uint8{0x9d}},
 	{APOPFW, ynone, Pe, [23]uint8{0x9d}},
@@ -1528,16 +1683,37 @@ var optab =
 	{AROUNDSS, yaes2, Pq, [23]uint8{0x3a, 0x0a, 0}},
 	{APSHUFD, yxshuf, Pq, [23]uint8{0x70, 0}},
 	{APCLMULQDQ, yxshuf, Pq, [23]uint8{0x3a, 0x44, 0}},
+
+	{AANDNL, yvex_r3, Pvex, [23]uint8{VEX_LZ_0F38_W0, 0xF2}},
+	{AANDNQ, yvex_r3, Pvex, [23]uint8{VEX_LZ_0F38_W1, 0xF2}},
+	{ABEXTRL, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_0F38_W0, 0xF7}},
+	{ABEXTRQ, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_0F38_W1, 0xF7}},
+	{ABZHIL, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_0F38_W0, 0xF5}},
+	{ABZHIQ, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_0F38_W1, 0xF5}},
+	{AMULXL, yvex_r3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W0, 0xF6}},
+	{AMULXQ, yvex_r3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W1, 0xF6}},
+	{APDEPL, yvex_r3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W0, 0xF5}},
+	{APDEPQ, yvex_r3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W1, 0xF5}},
+	{APEXTL, yvex_r3, Pvex, [23]uint8{VEX_LZ_F3_0F38_W0, 0xF5}},
+	{APEXTQ, yvex_r3, Pvex, [23]uint8{VEX_LZ_F3_0F38_W1, 0xF5}},
+	{ASARXL, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_F3_0F38_W0, 0xF7}},
+	{ASARXQ, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_F3_0F38_W1, 0xF7}},
+	{ASHLXL, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_66_0F38_W0, 0xF7}},
+	{ASHLXQ, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_66_0F38_W1, 0xF7}},
+	{ASHRXL, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W0, 0xF7}},
+	{ASHRXQ, yvex_vmr3, Pvex, [23]uint8{VEX_LZ_F2_0F38_W1, 0xF7}},
+
 	{AVZEROUPPER, ynone, Px, [23]uint8{0xc5, 0xf8, 0x77}},
-	{AMOVHDU, yxmov_vex, Pvex2, [23]uint8{0x6f, 0x7f}},
-	{AMOVNTHD, yxr_ml_vex, Pvex1, [23]uint8{0xe7}},
-	{AMOVHDA, yxmov_vex, Pvex1, [23]uint8{0x6f, 0x7f}},
-	{AVPCMPEQB, yxm_xm_xm, Pvex1, [23]uint8{0x74, 0x74}},
-	{AVPXOR, yxm_xm_xm, Pvex1, [23]uint8{0xef, 0xef}},
-	{AVPMOVMSKB, ymskb_vex, Pvex1, [23]uint8{0xd7}},
-	{AVPAND, yxm_xm_xm, Pvex1, [23]uint8{0xdb, 0xdb}},
-	{AVPBROADCASTB, yml_xr_vex, Pvex3, [23]uint8{0x78, 0x78}},
-	{AVPTEST, yml_xr_vex, Pvex3, [23]uint8{0x17, 0x17}},
+	{AVMOVDQU, yvex_vmovdqa, Pvex, [23]uint8{VEX_128_F3_0F_WIG, 0x6F, VEX_128_F3_0F_WIG, 0x7F, VEX_256_F3_0F_WIG, 0x6F, VEX_256_F3_0F_WIG, 0x7F}},
+	{AVMOVDQA, yvex_vmovdqa, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0x6F, VEX_128_66_0F_WIG, 0x7F, VEX_256_66_0F_WIG, 0x6F, VEX_256_66_0F_WIG, 0x7F}},
+	{AVMOVNTDQ, yvex_vmovntdq, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0xE7, VEX_256_66_0F_WIG, 0xE7}},
+	{AVPCMPEQB, yvex_xy3, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0x74, VEX_256_66_0F_WIG, 0x74}},
+	{AVPXOR, yvex_xy3, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0xEF, VEX_256_66_0F_WIG, 0xEF}},
+	{AVPMOVMSKB, yvex_xyr2, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0xD7, VEX_256_66_0F_WIG, 0xD7}},
+	{AVPAND, yvex_xy3, Pvex, [23]uint8{VEX_128_66_0F_WIG, 0xDB, VEX_256_66_0F_WIG, 0xDB}},
+	{AVPBROADCASTB, yvex_vpbroadcast, Pvex, [23]uint8{VEX_128_66_0F38_W0, 0x78, VEX_256_66_0F38_W0, 0x78}},
+	{AVPTEST, yvex_xy2, Pvex, [23]uint8{VEX_128_66_0F38_WIG, 0x17, VEX_256_66_0F38_WIG, 0x17}},
+
 	{AXACQUIRE, ynone, Px, [23]uint8{0xf2}},
 	{AXRELEASE, ynone, Px, [23]uint8{0xf3}},
 	{AXBEGIN, yxbegin, Px, [23]uint8{0xc7, 0xf8}},
@@ -1684,6 +1860,7 @@ func span6(ctxt *obj.Link, s *obj.LSym) {
 	var loop int32
 	var m int
 	var p *obj.Prog
+	errors := ctxt.Errors
 	for {
 		loop = 0
 		for i = 0; i < len(s.R); i++ {
@@ -1796,6 +1973,9 @@ func span6(ctxt *obj.Link, s *obj.LSym) {
 		if loop == 0 {
 			break
 		}
+		if ctxt.Errors > errors {
+			return
+		}
 	}
 
 	if ctxt.Headtype == obj.Hnacl {
@@ -1928,6 +2108,9 @@ func instinit() {
 	ycover[Ym*Ymax+Yxm] = 1
 	ycover[Yxr*Ymax+Yxm] = 1
 
+	ycover[Ym*Ymax+Yym] = 1
+	ycover[Yyr*Ymax+Yym] = 1
+
 	for i := 0; i < MAXREG; i++ {
 		reg[i] = -1
 		if i >= REG_AL && i <= REG_R15B {
@@ -1962,6 +2145,12 @@ func instinit() {
 				regrex[i] = Rxr | Rxx | Rxb
 			}
 		}
+		if i >= REG_Y0 && i <= REG_Y0+15 {
+			reg[i] = (i - REG_Y0) & 7
+			if i >= REG_Y0+8 {
+				regrex[i] = Rxr | Rxx | Rxb
+			}
+		}
 
 		if i >= REG_CR+8 && i <= REG_CR+15 {
 			regrex[i] = Rxr
@@ -2113,6 +2302,11 @@ func oclass(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) int {
 		return Yxxx
 
 	case obj.TYPE_MEM:
+		if a.Name != obj.NAME_NONE {
+			if ctxt.Asmode == 64 && (a.Reg != REG_NONE || a.Index != REG_NONE || a.Scale != 0) {
+				return Yxxx
+			}
+		}
 		return Ym
 
 	case obj.TYPE_ADDR:
@@ -2294,6 +2488,24 @@ func oclass(ctxt *obj.Link, p *obj.Prog, a *obj.Addr) int {
 		REG_X0 + 15:
 		return Yxr
 
+	case REG_Y0 + 0,
+		REG_Y0 + 1,
+		REG_Y0 + 2,
+		REG_Y0 + 3,
+		REG_Y0 + 4,
+		REG_Y0 + 5,
+		REG_Y0 + 6,
+		REG_Y0 + 7,
+		REG_Y0 + 8,
+		REG_Y0 + 9,
+		REG_Y0 + 10,
+		REG_Y0 + 11,
+		REG_Y0 + 12,
+		REG_Y0 + 13,
+		REG_Y0 + 14,
+		REG_Y0 + 15:
+		return Yyr
+
 	case REG_CS:
 		return Ycs
 	case REG_SS:
@@ -2594,7 +2806,7 @@ func asmandsz(ctxt *obj.Link, p *obj.Prog, a *obj.Addr, r int, rex int, m64 int)
 		goto bad
 
 	case obj.TYPE_REG:
-		if a.Reg < REG_AL || REG_X0+15 < a.Reg {
+		if a.Reg < REG_AL || REG_Y0+15 < a.Reg {
 			goto bad
 		}
 		if v != 0 {
@@ -3022,77 +3234,40 @@ var bpduff2 = []byte{
 	0x48, 0x8b, 0x6d, 0x00, // MOVQ 0(BP), BP
 }
 
-// Assemble vex prefix, from 3 operands and prefix.
+// Emit VEX prefix and opcode byte.
+// The three addresses are the r/m, vvvv, and reg fields.
+// The reg and rm arguments appear in the same order as the
+// arguments to asmand, which typically follows the call to asmvex.
+// The final two arguments are the VEX prefix (see encoding above)
+// and the opcode byte.
 // For details about vex prefix see:
 // https://en.wikipedia.org/wiki/VEX_prefix#Technical_description
-func vexprefix(ctxt *obj.Link, to *obj.Addr, from *obj.Addr, from3 *obj.Addr, pref uint8) {
-	rexR := regrex[to.Reg]
-	rexB := regrex[from.Reg]
-	rexX := regrex[from.Index]
-	var prefBit uint8
-	// This will go into VEX.PP field.
-	if pref == Pvex1 || pref == Pvex3 {
-		prefBit = 1
-	} else if pref == Pvex2 {
-		prefBit = 2
-	} // TODO add Pvex0
-
-	if rexX == 0 && rexB == 0 && pref != Pvex3 { // 2-byte vex prefix
-		// In 2-byte case, first byte is always C5
+func asmvex(ctxt *obj.Link, rm, v, r *obj.Addr, vex, opcode uint8) {
+	ctxt.Vexflag = 1
+	rexR := regrex[r.Reg] & Rxr
+	rexB := regrex[rm.Reg] & Rxb
+	rexX := regrex[rm.Index] & Rxx
+	vexM := (vex >> 3) & 0xF
+	vexWLP := vex & 0x87
+	vexV := byte(0)
+	if v != nil {
+		vexV = byte(reg[v.Reg]|(regrex[v.Reg]&Rxr)<<1) & 0xF
+	}
+	vexV ^= 0xF
+	if vexM == 1 && (rexX|rexB) == 0 && vex&vexW1 == 0 {
+		// Can use 2-byte encoding.
 		ctxt.Andptr[0] = 0xc5
-		ctxt.Andptr = ctxt.Andptr[1:]
-
-		if from3 == nil {
-			// If this is a 2-operand instruction fill VEX.VVVV with 1111
-			// We are also interested only in 256-bit version, so VEX.L=1
-			ctxt.Andptr[0] = 0x7c
-		} else {
-			// VEX.L=1
-			ctxt.Andptr[0] = 0x4
-			// VEX.VVVV (bits 3:6) is a inversed register number
-			ctxt.Andptr[0] |= byte((^(from3.Reg - REG_X0))<<3) & 0x78
-		}
-
-		// VEX encodes REX.R as inversed upper bit
-		if rexR == 0 {
-			ctxt.Andptr[0] |= 0x80
-		}
-		ctxt.Andptr[0] |= prefBit
-		ctxt.Andptr = ctxt.Andptr[1:]
-	} else { // 3-byte case
-		// First byte is always C$
+		ctxt.Andptr[1] = byte(rexR<<5) ^ 0x80 | vexV<<3 | vexWLP
+		ctxt.Andptr = ctxt.Andptr[2:]
+	} else {
+		// Must use 3-byte encoding.
 		ctxt.Andptr[0] = 0xc4
-		ctxt.Andptr = ctxt.Andptr[1:]
-
-		// Encode VEX.mmmmm with prefix value, assume 0F,
-		// which encodes as 1, unless 0F38 was specified with pvex3.
-		ctxt.Andptr[0] = 0x1 // TODO handle 0F3A
-		if pref == Pvex3 {
-			ctxt.Andptr[0] = 0x2
-		}
-
-		// REX.[RXB] are inverted and encoded in 3 upper bits
-		if rexR == 0 {
-			ctxt.Andptr[0] |= 0x80
-		}
-		if rexX == 0 {
-			ctxt.Andptr[0] |= 0x40
-		}
-		if rexB == 0 {
-			ctxt.Andptr[0] |= 0x20
-		}
-		ctxt.Andptr = ctxt.Andptr[1:]
-
-		// Fill VEX.VVVV, same as 2-operand VEX instruction.
-		if from3 == nil {
-			ctxt.Andptr[0] = 0x7c
-		} else {
-			ctxt.Andptr[0] = 0x4
-			ctxt.Andptr[0] |= byte((^(from3.Reg - REG_X0))<<3) & 0x78
-		}
-		ctxt.Andptr[0] |= prefBit
-		ctxt.Andptr = ctxt.Andptr[1:]
+		ctxt.Andptr[1] = (byte(rexR|rexX|rexB) << 5) ^ 0xE0 | vexM
+		ctxt.Andptr[2] = vexV<<3 | vexWLP
+		ctxt.Andptr = ctxt.Andptr[3:]
 	}
+	ctxt.Andptr[0] = opcode
+	ctxt.Andptr = ctxt.Andptr[1:]
 }
 
 func doasm(ctxt *obj.Link, p *obj.Prog) {
@@ -3189,15 +3364,19 @@ func doasm(ctxt *obj.Link, p *obj.Prog) {
 				ctxt.Andptr[0] = Pm
 				ctxt.Andptr = ctxt.Andptr[1:]
 
-			case Pq3: /* 16 bit escape, Rex.w, and opcode escape */
+			case Pq3: /* 16 bit escape and opcode escape + REX.W */
+				ctxt.Rexflag |= Pw
 				ctxt.Andptr[0] = Pe
 				ctxt.Andptr = ctxt.Andptr[1:]
-
-				ctxt.Andptr[0] = Pw
-				ctxt.Andptr = ctxt.Andptr[1:]
 				ctxt.Andptr[0] = Pm
 				ctxt.Andptr = ctxt.Andptr[1:]
 
+			case Pq4: /*  66 0F 38 */
+				ctxt.Andptr[0] = 0x66
+				ctxt.Andptr[1] = 0x0F
+				ctxt.Andptr[2] = 0x38
+				ctxt.Andptr = ctxt.Andptr[3:]
+
 			case Pf2, /* xmm opcode escape */
 				Pf3:
 				ctxt.Andptr[0] = byte(o.prefix)
@@ -3206,11 +3385,17 @@ func doasm(ctxt *obj.Link, p *obj.Prog) {
 				ctxt.Andptr[0] = Pm
 				ctxt.Andptr = ctxt.Andptr[1:]
 
-			case Pfw: /* first escape, Rex.w, and second escape */
+			case Pef3:
+				ctxt.Andptr[0] = Pe
+				ctxt.Andptr = ctxt.Andptr[1:]
 				ctxt.Andptr[0] = Pf3
 				ctxt.Andptr = ctxt.Andptr[1:]
+				ctxt.Andptr[0] = Pm
+				ctxt.Andptr = ctxt.Andptr[1:]
 
-				ctxt.Andptr[0] = Pw
+			case Pfw: /* xmm opcode escape + REX.W */
+				ctxt.Rexflag |= Pw
+				ctxt.Andptr[0] = Pf3
 				ctxt.Andptr = ctxt.Andptr[1:]
 				ctxt.Andptr[0] = Pm
 				ctxt.Andptr = ctxt.Andptr[1:]
@@ -3337,13 +3522,6 @@ func doasm(ctxt *obj.Link, p *obj.Prog) {
 				mediaop(ctxt, o, op, int(yt.zoffset), z)
 				asmand(ctxt, p, &p.From, &p.To)
 
-			case Zm_r_xm_vex:
-				ctxt.Vexflag = 1
-				vexprefix(ctxt, &p.To, &p.From, nil, o.prefix)
-				ctxt.Andptr[0] = byte(op)
-				ctxt.Andptr = ctxt.Andptr[1:]
-				asmand(ctxt, p, &p.From, &p.To)
-
 			case Zm_r_xm_nr:
 				ctxt.Rexflag = 0
 				mediaop(ctxt, o, op, int(yt.zoffset), z)
@@ -3403,20 +3581,18 @@ func doasm(ctxt *obj.Link, p *obj.Prog) {
 				ctxt.Andptr = ctxt.Andptr[1:]
 				asmand(ctxt, p, &p.To, &p.From)
 
-			case Zr_m_xm_vex:
-				ctxt.Vexflag = 1
-				vexprefix(ctxt, &p.From, &p.To, nil, o.prefix)
-				ctxt.Andptr[0] = byte(op)
-				ctxt.Andptr = ctxt.Andptr[1:]
-				asmand(ctxt, p, &p.To, &p.From)
-
-			case Zr_r_r_vex:
-				ctxt.Vexflag = 1
-				vexprefix(ctxt, &p.To, &p.From, p.From3, o.prefix)
-				ctxt.Andptr[0] = byte(op)
-				ctxt.Andptr = ctxt.Andptr[1:]
+			case Zvex_rm_v_r:
+				asmvex(ctxt, &p.From, p.From3, &p.To, o.op[z], o.op[z+1])
 				asmand(ctxt, p, &p.From, &p.To)
 
+			case Zvex_v_rm_r:
+				asmvex(ctxt, p.From3, &p.From, &p.To, o.op[z], o.op[z+1])
+				asmand(ctxt, p, p.From3, &p.To)
+
+			case Zvex_r_v_rm:
+				asmvex(ctxt, &p.To, p.From3, &p.From, o.op[z], o.op[z+1])
+				asmand(ctxt, p, &p.To, &p.From)
+
 			case Zr_m_xm:
 				mediaop(ctxt, o, op, int(yt.zoffset), z)
 				asmand(ctxt, p, &p.To, &p.From)
@@ -4274,7 +4450,8 @@ bad:
 		}
 	}
 
-	ctxt.Diag("doasm: notfound ft=%d tt=%d %v %d %d", p.Ft, p.Tt, p, oclass(ctxt, p, &p.From), oclass(ctxt, p, &p.To))
+	ctxt.Diag("invalid instruction: %v", p)
+	//	ctxt.Diag("doasm: notfound ft=%d tt=%d %v %d %d", p.Ft, p.Tt, p, oclass(ctxt, p, &p.From), oclass(ctxt, p, &p.To))
 	return
 }
 
diff --git a/src/cmd/internal/obj/x86/list6.go b/src/cmd/internal/obj/x86/list6.go
index fc79b90..0284bbf 100644
--- a/src/cmd/internal/obj/x86/list6.go
+++ b/src/cmd/internal/obj/x86/list6.go
@@ -104,6 +104,22 @@ var Register = []string{
 	"X13",
 	"X14",
 	"X15",
+	"Y0",
+	"Y1",
+	"Y2",
+	"Y3",
+	"Y4",
+	"Y5",
+	"Y6",
+	"Y7",
+	"Y8",
+	"Y9",
+	"Y10",
+	"Y11",
+	"Y12",
+	"Y13",
+	"Y14",
+	"Y15",
 	"CS", /* [D_CS] */
 	"SS",
 	"DS",
diff --git a/src/cmd/internal/obj/x86/obj6_test.go b/src/cmd/internal/obj/x86/obj6_test.go
index 4387db6..5fa1d3b 100644
--- a/src/cmd/internal/obj/x86/obj6_test.go
+++ b/src/cmd/internal/obj/x86/obj6_test.go
@@ -150,6 +150,13 @@ func parseOutput(t *testing.T, td *ParsedTestData, asmout []byte) {
 func TestDynlink(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
 
+	if os.Getenv("GOHOSTARCH") != "" {
+		// TODO: make this work? It was failing due to the
+		// GOARCH= filtering above and skipping is easiest for
+		// now.
+		t.Skip("skipping when GOHOSTARCH is set")
+	}
+
 	testdata := parseTestData(t)
 	asmout := asmOutput(t, testdata.input)
 	parseOutput(t, testdata, asmout)
diff --git a/src/cmd/link/doc.go b/src/cmd/link/doc.go
index 69f9b57..ffaead7 100644
--- a/src/cmd/link/doc.go
+++ b/src/cmd/link/doc.go
@@ -52,6 +52,9 @@ Flags:
 		The dynamic header is on by default, even without any
 		references to dynamic libraries, because many common
 		system tools now assume the presence of the header.
+	-extar ar
+		Set the external archive program (default "ar").
+		Used only for -buildmode=c-archive.
 	-extld linker
 		Set the external linker (default "clang" or "gcc").
 	-extldflags flags
diff --git a/src/cmd/link/internal/arm/asm.go b/src/cmd/link/internal/arm/asm.go
index 8ffa656..74c2249 100644
--- a/src/cmd/link/internal/arm/asm.go
+++ b/src/cmd/link/internal/arm/asm.go
@@ -689,14 +689,14 @@ func asmb() {
 	switch ld.HEADTYPE {
 	default:
 	case obj.Hplan9: /* plan 9 */
-		ld.Thearch.Lput(0x647)                      /* magic */
-		ld.Thearch.Lput(uint32(ld.Segtext.Filelen)) /* sizes */
-		ld.Thearch.Lput(uint32(ld.Segdata.Filelen))
-		ld.Thearch.Lput(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
-		ld.Thearch.Lput(uint32(ld.Symsize))      /* nsyms */
-		ld.Thearch.Lput(uint32(ld.Entryvalue())) /* va of entry */
-		ld.Thearch.Lput(0)
-		ld.Thearch.Lput(uint32(ld.Lcsize))
+		ld.Lputb(0x647)                      /* magic */
+		ld.Lputb(uint32(ld.Segtext.Filelen)) /* sizes */
+		ld.Lputb(uint32(ld.Segdata.Filelen))
+		ld.Lputb(uint32(ld.Segdata.Length - ld.Segdata.Filelen))
+		ld.Lputb(uint32(ld.Symsize))      /* nsyms */
+		ld.Lputb(uint32(ld.Entryvalue())) /* va of entry */
+		ld.Lputb(0)
+		ld.Lputb(uint32(ld.Lcsize))
 
 	case obj.Hlinux,
 		obj.Hfreebsd,
diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go
index a34cf3c..6d34978 100644
--- a/src/cmd/link/internal/ld/elf.go
+++ b/src/cmd/link/internal/ld/elf.go
@@ -850,7 +850,26 @@ func Elfinit() {
 	}
 }
 
+// Make sure PT_LOAD is aligned properly and
+// that there is no gap,
+// correct ELF loaders will do this implicitly,
+// but buggy ELF loaders like the one in some
+// versions of QEMU and UPX won't.
+func fixElfPhdr(e *ElfPhdr) {
+	frag := int(e.vaddr & (e.align - 1))
+
+	e.off -= uint64(frag)
+	e.vaddr -= uint64(frag)
+	e.paddr -= uint64(frag)
+	e.filesz += uint64(frag)
+	e.memsz += uint64(frag)
+}
+
 func elf64phdr(e *ElfPhdr) {
+	if e.type_ == PT_LOAD {
+		fixElfPhdr(e)
+	}
+
 	Thearch.Lput(e.type_)
 	Thearch.Lput(e.flags)
 	Thearch.Vput(e.off)
@@ -863,16 +882,7 @@ func elf64phdr(e *ElfPhdr) {
 
 func elf32phdr(e *ElfPhdr) {
 	if e.type_ == PT_LOAD {
-		// Correct ELF loaders will do this implicitly,
-		// but buggy ELF loaders like the one in some
-		// versions of QEMU won't.
-		frag := int(e.vaddr & (e.align - 1))
-
-		e.off -= uint64(frag)
-		e.vaddr -= uint64(frag)
-		e.paddr -= uint64(frag)
-		e.filesz += uint64(frag)
-		e.memsz += uint64(frag)
+		fixElfPhdr(e)
 	}
 
 	Thearch.Lput(e.type_)
diff --git a/src/cmd/link/internal/ld/lib.go b/src/cmd/link/internal/ld/lib.go
index 7561250..bdfa056 100644
--- a/src/cmd/link/internal/ld/lib.go
+++ b/src/cmd/link/internal/ld/lib.go
@@ -207,6 +207,7 @@ var (
 	tmpdir             string
 	extld              string
 	extldflags         string
+	extar              string
 	libgccfile         string
 	debug_s            int // backup old value of debug['s']
 	Ctxt               *Link
@@ -504,14 +505,21 @@ func loadlib() {
 
 	var i int
 	for i = 0; i < len(Ctxt.Library); i++ {
-		if Debug['v'] > 1 {
-			fmt.Fprintf(&Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), Ctxt.Library[i].File, Ctxt.Library[i].Objref)
-		}
 		iscgo = iscgo || Ctxt.Library[i].Pkg == "runtime/cgo"
+		if Ctxt.Library[i].Shlib == "" {
+			if Debug['v'] > 1 {
+				fmt.Fprintf(&Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), Ctxt.Library[i].File, Ctxt.Library[i].Objref)
+			}
+			objfile(Ctxt.Library[i])
+		}
+	}
+
+	for i = 0; i < len(Ctxt.Library); i++ {
 		if Ctxt.Library[i].Shlib != "" {
+			if Debug['v'] > 1 {
+				fmt.Fprintf(&Bso, "%5.2f autolib: %s (from %s)\n", obj.Cputime(), Ctxt.Library[i].Shlib, Ctxt.Library[i].Objref)
+			}
 			ldshlibsyms(Ctxt.Library[i].Shlib)
-		} else {
-			objfile(Ctxt.Library[i])
 		}
 	}
 
@@ -1008,8 +1016,12 @@ func archive() {
 		return
 	}
 
+	if extar == "" {
+		extar = "ar"
+	}
+
 	mayberemoveoutfile()
-	argv := []string{"ar", "-q", "-c", "-s", outfile}
+	argv := []string{extar, "-q", "-c", "-s", outfile}
 	argv = append(argv, fmt.Sprintf("%s/go.o", tmpdir))
 	argv = append(argv, hostobjCopy()...)
 
@@ -1458,18 +1470,11 @@ func ldshlibsyms(shlib string) {
 			continue
 		}
 		lsym := Linklookup(Ctxt, elfsym.Name, 0)
-		if lsym.Type != 0 && lsym.Type != obj.SDYNIMPORT && lsym.Dupok == 0 {
-			if (lsym.Type != obj.SBSS && lsym.Type != obj.SNOPTRBSS) || len(lsym.R) != 0 || len(lsym.P) != 0 || f.Sections[elfsym.Section].Type != elf.SHT_NOBITS {
-				Diag("Found duplicate symbol %s reading from %s, first found in %s", elfsym.Name, shlib, lsym.File)
-			}
-			if lsym.Size > int64(elfsym.Size) {
-				// If the existing symbol is a BSS value that is
-				// larger than the one read from the shared library,
-				// keep references to that.  Conversely, if the
-				// version from the shared libray is larger, we want
-				// to make all references be to that.
-				continue
-			}
+		// Because loadlib above loads all .a files before loading any shared
+		// libraries, any symbols we find that duplicate symbols already
+		// loaded should be ignored (the symbols from the .a files "win").
+		if lsym.Type != 0 {
+			continue
 		}
 		lsym.Type = obj.SDYNIMPORT
 		lsym.ElfType = elf.ST_TYPE(elfsym.Info)
diff --git a/src/cmd/link/internal/ld/pobj.go b/src/cmd/link/internal/ld/pobj.go
index 319e850..808d377 100644
--- a/src/cmd/link/internal/ld/pobj.go
+++ b/src/cmd/link/internal/ld/pobj.go
@@ -89,6 +89,7 @@ func Ldmain() {
 	flag.Var(&Buildmode, "buildmode", "set build `mode`")
 	obj.Flagcount("c", "dump call graph", &Debug['c'])
 	obj.Flagcount("d", "disable dynamic executable", &Debug['d'])
+	obj.Flagstr("extar", "archive program for buildmode=c-archive", &extar)
 	obj.Flagstr("extld", "use `linker` when linking in external mode", &extld)
 	obj.Flagstr("extldflags", "pass `flags` to external linker", &extldflags)
 	obj.Flagcount("f", "ignore version mismatch", &Debug['f'])
diff --git a/src/cmd/newlink/auto.go b/src/cmd/newlink/auto.go
deleted file mode 100644
index 21f6d60..0000000
--- a/src/cmd/newlink/auto.go
+++ /dev/null
@@ -1,117 +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.
-
-// Automatic symbol generation.
-
-// TODO(rsc): Handle go.typelink, go.track symbols.
-// TODO(rsc): Do not handle $f64. and $f32. symbols. Instead, generate those
-// from the compiler and assemblers as dupok data, and then remove autoData below.
-package main
-
-import (
-	"cmd/internal/goobj"
-	"strconv"
-	"strings"
-)
-
-// linkerDefined lists the symbols supplied by other parts of the linker
-// (runtime.go and layout.go).
-var linkerDefined = map[string]bool{
-	"runtime.bss":        true,
-	"runtime.data":       true,
-	"runtime.ebss":       true,
-	"runtime.edata":      true,
-	"runtime.efunctab":   true,
-	"runtime.end":        true,
-	"runtime.enoptrbss":  true,
-	"runtime.enoptrdata": true,
-	"runtime.erodata":    true,
-	"runtime.etext":      true,
-	"runtime.etypelink":  true,
-	"runtime.functab":    true,
-	"runtime.gcbss":      true,
-	"runtime.gcdata":     true,
-	"runtime.noptrbss":   true,
-	"runtime.noptrdata":  true,
-	"runtime.pclntab":    true,
-	"runtime.rodata":     true,
-	"runtime.text":       true,
-	"runtime.typelink":   true,
-}
-
-// isAuto reports whether sym is an automatically-generated data or constant symbol.
-func (p *Prog) isAuto(sym goobj.SymID) bool {
-	return strings.HasPrefix(sym.Name, "go.weak.") ||
-		strings.HasPrefix(sym.Name, "$f64.") ||
-		strings.HasPrefix(sym.Name, "$f32.") ||
-		linkerDefined[sym.Name]
-}
-
-// autoData defines the automatically generated data symbols needed by p.
-func (p *Prog) autoData() {
-	for sym := range p.Missing {
-		switch {
-		// Floating-point constants that need to be loaded from memory are
-		// written as $f64.{16 hex digits} or $f32.{8 hex digits}; the hex digits
-		// give the IEEE bit pattern of the constant. As far as the layout into
-		// memory is concerned, we interpret these as uint64 or uint32 constants.
-		case strings.HasPrefix(sym.Name, "$f64."), strings.HasPrefix(sym.Name, "$f32."):
-			size := 64
-			if sym.Name[2:4] == "32" {
-				size = 32
-			}
-			delete(p.Missing, sym)
-			fbits, err := strconv.ParseUint(sym.Name[len("$f64."):], 16, size)
-			if err != nil {
-				p.errorf("unexpected floating point symbol %s", sym)
-				continue
-			}
-			data := make([]byte, size/8)
-			if size == 64 {
-				p.byteorder.PutUint64(data, fbits)
-			} else {
-				p.byteorder.PutUint32(data, uint32(fbits))
-			}
-			p.addSym(&Sym{
-				Sym: &goobj.Sym{
-					SymID: sym,
-					Kind:  goobj.SRODATA,
-					Size:  size / 8,
-				},
-				Bytes: data,
-			})
-		}
-	}
-}
-
-// autoConst defines the automatically generated constant symbols needed by p.
-func (p *Prog) autoConst() {
-	for sym := range p.Missing {
-		switch {
-		case strings.HasPrefix(sym.Name, "go.weak."):
-			// weak symbol resolves to actual symbol if present, or else nil.
-			delete(p.Missing, sym)
-			targ := sym
-			targ.Name = sym.Name[len("go.weak."):]
-			var addr Addr
-			if s := p.Syms[targ]; s != nil {
-				addr = s.Addr
-			}
-			p.defineConst(sym.Name, addr)
-		}
-	}
-}
-
-// defineConst defines a new symbol with the given name and constant address.
-func (p *Prog) defineConst(name string, addr Addr) {
-	sym := goobj.SymID{Name: name}
-	p.addSym(&Sym{
-		Sym: &goobj.Sym{
-			SymID: sym,
-			Kind:  goobj.SCONST,
-		},
-		Package: nil,
-		Addr:    addr,
-	})
-}
diff --git a/src/cmd/newlink/auto_test.go b/src/cmd/newlink/auto_test.go
deleted file mode 100644
index f99e097..0000000
--- a/src/cmd/newlink/auto_test.go
+++ /dev/null
@@ -1,72 +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.
-
-// Test for auto-generated symbols.
-
-// There is no test for $f64. and $f32. symbols, because those are
-// not possible to write in the assembler syntax. Instead of changing
-// the assembler to allow that, we plan to change the compilers
-// not to generate such symbols (plain dupok data is sufficient).
-
-package main
-
-import (
-	"bytes"
-	"cmd/internal/goobj"
-	"testing"
-)
-
-// Each test case is an object file, generated from a corresponding .s file.
-// The image of the autotab symbol should be a sequence of pairs of
-// identical 8-byte sequences.
-var autoTests = []string{
-	"testdata/autosection.6",
-	"testdata/autoweak.6",
-}
-
-func TestAuto(t *testing.T) {
-	for _, obj := range autoTests {
-		p := Prog{GOOS: "darwin", GOARCH: "amd64", StartSym: "start"}
-		p.omitRuntime = true
-		p.Error = func(s string) { t.Error(s) }
-		var buf bytes.Buffer
-		p.link(&buf, obj)
-		if p.NumError > 0 {
-			continue // already reported
-		}
-
-		const name = "autotab"
-		sym := p.Syms[goobj.SymID{Name: name}]
-		if sym == nil {
-			t.Errorf("%s is missing %s symbol", obj, name)
-			return
-		}
-		if sym.Size == 0 {
-			return
-		}
-
-		seg := sym.Section.Segment
-		off := sym.Addr - seg.VirtAddr
-		data := seg.Data[off : off+Addr(sym.Size)]
-		if len(data)%16 != 0 {
-			t.Errorf("%s: %s.Size = %d, want multiple of 16", obj, name, len(data))
-			return
-		}
-	Data:
-		for i := 0; i < len(data); i += 16 {
-			have := p.byteorder.Uint64(data[i : i+8])
-			want := p.byteorder.Uint64(data[i+8 : i+16])
-			if have != want {
-				// Look for relocation so we can explain what went wrong.
-				for _, r := range sym.Reloc {
-					if r.Offset == i {
-						t.Errorf("%s: %s+%#x: %s: have %#x want %#x", obj, name, i, r.Sym, have, want)
-						continue Data
-					}
-				}
-				t.Errorf("%s: %s+%#x: have %#x want %#x", obj, name, i, have, want)
-			}
-		}
-	}
-}
diff --git a/src/cmd/newlink/dead.go b/src/cmd/newlink/dead.go
deleted file mode 100644
index ee23a61..0000000
--- a/src/cmd/newlink/dead.go
+++ /dev/null
@@ -1,74 +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.
-
-// Removal of dead code and data.
-
-package main
-
-import "cmd/internal/goobj"
-
-// dead removes unreachable code and data from the program.
-// It is basically a mark-sweep garbage collection: traverse all the
-// symbols reachable from the entry (startSymID) and then delete
-// the rest.
-func (p *Prog) dead() {
-	p.Dead = make(map[goobj.SymID]bool)
-	reachable := make(map[goobj.SymID]bool)
-	p.walkDead(p.startSym, reachable)
-
-	for sym := range p.Syms {
-		if !reachable[sym] {
-			delete(p.Syms, sym)
-			p.Dead[sym] = true
-		}
-	}
-
-	for sym := range p.Missing {
-		if !reachable[sym] {
-			delete(p.Missing, sym)
-			p.Dead[sym] = true
-		}
-	}
-
-	p.SymOrder = removeDead(p.SymOrder, reachable)
-
-	for _, pkg := range p.Packages {
-		pkg.Syms = removeDead(pkg.Syms, reachable)
-	}
-}
-
-// walkDead traverses the symbols reachable from sym, adding them to reachable.
-// The caller has verified that reachable[sym] = false.
-func (p *Prog) walkDead(sym goobj.SymID, reachable map[goobj.SymID]bool) {
-	reachable[sym] = true
-	s := p.Syms[sym]
-	if s == nil {
-		return
-	}
-	for i := range s.Reloc {
-		r := &s.Reloc[i]
-		if !reachable[r.Sym] {
-			p.walkDead(r.Sym, reachable)
-		}
-	}
-	if s.Func != nil {
-		for _, fdata := range s.Func.FuncData {
-			if fdata.Sym.Name != "" && !reachable[fdata.Sym] {
-				p.walkDead(fdata.Sym, reachable)
-			}
-		}
-	}
-}
-
-// removeDead removes unreachable (dead) symbols from syms,
-// returning a shortened slice using the same underlying array.
-func removeDead(syms []*Sym, reachable map[goobj.SymID]bool) []*Sym {
-	keep := syms[:0]
-	for _, sym := range syms {
-		if reachable[sym.SymID] {
-			keep = append(keep, sym)
-		}
-	}
-	return keep
-}
diff --git a/src/cmd/newlink/dead_test.go b/src/cmd/newlink/dead_test.go
deleted file mode 100644
index eb34d05..0000000
--- a/src/cmd/newlink/dead_test.go
+++ /dev/null
@@ -1,97 +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.
-
-package main
-
-import (
-	"cmd/internal/goobj"
-	"reflect"
-	"strings"
-	"testing"
-)
-
-// Each test case is an object file, generated from a corresponding .s file.
-// The symbols in the object file with a dead_ prefix are the ones that
-// should be removed from the program.
-var deadTests = []string{
-	"testdata/dead.6",
-}
-
-func TestDead(t *testing.T) {
-	for _, obj := range deadTests {
-		p := Prog{GOOS: "darwin", GOARCH: "amd64", StartSym: "start"}
-		p.omitRuntime = true
-		p.Error = func(s string) { t.Error(s) }
-		p.init()
-		p.scan(obj)
-		if p.NumError > 0 {
-			continue // already reported
-		}
-		origSyms := copyMap(p.Syms)
-		origMissing := copyMap(p.Missing)
-		origSymOrder := copySlice(p.SymOrder)
-		origPkgSyms := copySlice(p.Packages["main"].Syms)
-		p.dead()
-		checkDeadMap(t, obj, "p.Syms", origSyms, p.Syms)
-		checkDeadMap(t, obj, "p.Missing", origMissing, p.Missing)
-		checkDeadSlice(t, obj, "p.SymOrder", origSymOrder, p.SymOrder)
-		checkDeadSlice(t, obj, `p.Packages["main"].Syms`, origPkgSyms, p.Packages["main"].Syms)
-	}
-}
-
-func copyMap(m interface{}) interface{} {
-	v := reflect.ValueOf(m)
-	out := reflect.MakeMap(v.Type())
-	for _, key := range v.MapKeys() {
-		out.SetMapIndex(key, v.MapIndex(key))
-	}
-	return out.Interface()
-}
-
-func checkDeadMap(t *testing.T, obj, name string, old, new interface{}) {
-	vold := reflect.ValueOf(old)
-	vnew := reflect.ValueOf(new)
-	for _, vid := range vold.MapKeys() {
-		id := vid.Interface().(goobj.SymID)
-		if strings.HasPrefix(id.Name, "dead_") {
-			if vnew.MapIndex(vid).IsValid() {
-				t.Errorf("%s: %s contains unnecessary symbol %s", obj, name, id)
-			}
-		} else {
-			if !vnew.MapIndex(vid).IsValid() {
-				t.Errorf("%s: %s is missing symbol %s", obj, name, id)
-			}
-		}
-	}
-	for _, vid := range vnew.MapKeys() {
-		id := vid.Interface().(goobj.SymID)
-		if !vold.MapIndex(vid).IsValid() {
-			t.Errorf("%s: %s contains unexpected symbol %s", obj, name, id)
-		}
-	}
-}
-
-func copySlice(x []*Sym) (out []*Sym) {
-	return append(out, x...)
-}
-
-func checkDeadSlice(t *testing.T, obj, name string, old, new []*Sym) {
-	for i, s := range old {
-		if strings.HasPrefix(s.Name, "dead_") {
-			continue
-		}
-		if len(new) == 0 {
-			t.Errorf("%s: %s is missing symbol %s\nhave%v\nwant%v", obj, name, s, new, old[i:])
-			return
-		}
-		if new[0].SymID != s.SymID {
-			t.Errorf("%s: %s is incorrect: have %s, want %s\nhave%v\nwant%v", obj, name, new[0].SymID, s.SymID, new, old[i:])
-			return
-		}
-		new = new[1:]
-	}
-	if len(new) > 0 {
-		t.Errorf("%s: %s has unexpected symbols: %v", obj, name, new)
-	}
-}
diff --git a/src/cmd/newlink/debug.go b/src/cmd/newlink/debug.go
deleted file mode 100644
index ee20644..0000000
--- a/src/cmd/newlink/debug.go
+++ /dev/null
@@ -1,11 +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.
-
-// Generation of debug data structures (in the executable but not mapped at run time).
-// See also runtime.go.
-
-package main
-
-func (p *Prog) debug() {
-}
diff --git a/src/cmd/newlink/hex_test.go b/src/cmd/newlink/hex_test.go
deleted file mode 100644
index b76b266..0000000
--- a/src/cmd/newlink/hex_test.go
+++ /dev/null
@@ -1,74 +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.
-
-package main
-
-import (
-	"encoding/hex"
-	"fmt"
-	"io/ioutil"
-	"regexp"
-	"strconv"
-	"strings"
-	"testing"
-)
-
-// mustParseHexdumpFile returns a block of data generated by
-// parsing the hex dump in the named file.
-// If the file cannot be read or does not contain a valid hex dump,
-// mustParseHexdumpFile calls t.Fatal.
-func mustParseHexdumpFile(t *testing.T, file string) []byte {
-	hex, err := ioutil.ReadFile(file)
-	if err != nil {
-		t.Fatal(err)
-	}
-	data, err := parseHexdump(string(hex))
-	if err != nil {
-		t.Fatal(err)
-	}
-	return data
-}
-
-// parseHexdump parses the hex dump in text, which should be the
-// output of "hexdump -C" or Plan 9's "xd -b",
-// and returns the original data used to produce the dump.
-// It is meant to enable storing golden binary files as text, so that
-// changes to the golden files can be seen during code reviews.
-func parseHexdump(text string) ([]byte, error) {
-	var out []byte
-	for _, line := range strings.Split(text, "\n") {
-		if i := strings.Index(line, "|"); i >= 0 { // remove text dump
-			line = line[:i]
-		}
-		f := strings.Fields(line)
-		if len(f) > 1+16 {
-			return nil, fmt.Errorf("parsing hex dump: too many fields on line %q", line)
-		}
-		if len(f) == 0 || len(f) == 1 && f[0] == "*" { // all zeros block omitted
-			continue
-		}
-		addr64, err := strconv.ParseUint(f[0], 16, 0)
-		if err != nil {
-			return nil, fmt.Errorf("parsing hex dump: invalid address %q", f[0])
-		}
-		addr := int(addr64)
-		if len(out) < addr {
-			out = append(out, make([]byte, addr-len(out))...)
-		}
-		for _, x := range f[1:] {
-			val, err := strconv.ParseUint(x, 16, 8)
-			if err != nil {
-				return nil, fmt.Errorf("parsing hexdump: invalid hex byte %q", x)
-			}
-			out = append(out, byte(val))
-		}
-	}
-	return out, nil
-}
-
-func hexdump(data []byte) string {
-	text := hex.Dump(data) + fmt.Sprintf("%08x\n", len(data))
-	text = regexp.MustCompile(`\n([0-9a-f]+(\s+00){16}.*\n)+`).ReplaceAllString(text, "\n*\n")
-	return text
-}
diff --git a/src/cmd/newlink/layout.go b/src/cmd/newlink/layout.go
deleted file mode 100644
index d5c291e..0000000
--- a/src/cmd/newlink/layout.go
+++ /dev/null
@@ -1,180 +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.
-
-// Executable image layout - address assignment.
-
-package main
-
-import (
-	"cmd/internal/goobj"
-)
-
-// A layoutSection describes a single section to add to the
-// final executable. Go binaries only have a fixed set of possible
-// sections, and the symbol kind determines the section.
-type layoutSection struct {
-	Segment string
-	Section string
-	Kind    goobj.SymKind
-	Index   int
-}
-
-// layout defines the layout of the generated Go executable.
-// The order of entries here is the order in the executable.
-// Entries with the same Segment name must be contiguous.
-var layout = []layoutSection{
-	{Segment: "text", Section: "text", Kind: goobj.STEXT},
-	{Segment: "rodata", Section: "rodata", Kind: goobj.SRODATA},
-	{Segment: "rodata", Section: "functab", Kind: goobj.SPCLNTAB},
-	{Segment: "rodata", Section: "typelink", Kind: goobj.STYPELINK},
-	{Segment: "data", Section: "noptrdata", Kind: goobj.SNOPTRDATA},
-	{Segment: "data", Section: "data", Kind: goobj.SDATA},
-	{Segment: "data", Section: "bss", Kind: goobj.SBSS},
-	{Segment: "data", Section: "noptrbss", Kind: goobj.SNOPTRBSS},
-
-	// Later:
-	//	{"rodata", "type", goobj.STYPE},
-	//	{"rodata", "string", goobj.SSTRING},
-	//	{"rodata", "gostring", goobj.SGOSTRING},
-	//	{"rodata", "gofunc", goobj.SGOFUNC},
-}
-
-// layoutByKind maps from SymKind to an entry in layout.
-var layoutByKind []*layoutSection
-
-func init() {
-	// Build index from symbol type to layout entry.
-	max := 0
-	for _, sect := range layout {
-		if max <= int(sect.Kind) {
-			max = int(sect.Kind) + 1
-		}
-	}
-	layoutByKind = make([]*layoutSection, max)
-	for i := range layout {
-		sect := &layout[i]
-		layoutByKind[sect.Kind] = sect
-		sect.Index = i
-	}
-}
-
-// layout arranges symbols into sections and sections into segments,
-// and then it assigns addresses to segments, sections, and symbols.
-func (p *Prog) layout() {
-	sections := make([]*Section, len(layout))
-
-	// Assign symbols to sections using index, creating sections as needed.
-	// Could keep sections separated by type during input instead.
-	for _, sym := range p.SymOrder {
-		kind := sym.Kind
-		if kind < 0 || int(kind) >= len(layoutByKind) || layoutByKind[kind] == nil {
-			p.errorf("%s: unexpected symbol kind %v", sym.SymID, kind)
-			continue
-		}
-		lsect := layoutByKind[kind]
-		sect := sections[lsect.Index]
-		if sect == nil {
-			sect = &Section{
-				Name:  lsect.Section,
-				Align: 1,
-			}
-			sections[lsect.Index] = sect
-		}
-		if sym.Data.Size > 0 || len(sym.Bytes) > 0 {
-			sect.InFile = true
-		}
-		sym.Section = sect
-		sect.Syms = append(sect.Syms, sym)
-
-		// TODO(rsc): Incorporate alignment information.
-		// First that information needs to be added to the object files.
-		//
-		// if sect.Align < Addr(sym.Align) {
-		//	sect.Align = Addr(sym.Align)
-		// }
-	}
-
-	// Assign sections to segments, creating segments as needed.
-	var seg *Segment
-	for i, sect := range sections {
-		if sect == nil {
-			continue
-		}
-		segName := layout[i].Segment
-
-		// Special case: Mach-O does not support "rodata" segment,
-		// so store read-only data in text segment.
-		if p.GOOS == "darwin" && segName == "rodata" {
-			segName = "text"
-		}
-
-		if seg == nil || seg.Name != segName {
-			seg = &Segment{
-				Name: segName,
-			}
-			p.Segments = append(p.Segments, seg)
-		}
-		sect.Segment = seg
-		seg.Sections = append(seg.Sections, sect)
-	}
-
-	// Assign addresses.
-
-	// TODO(rsc): This choice needs to be informed by both
-	// the formatter and the target architecture.
-	// And maybe eventually a command line flag (sigh).
-	const segAlign = 4096
-
-	// TODO(rsc): Use a larger amount on most systems, which will let the
-	// compiler eliminate more nil checks.
-	if p.UnmappedSize == 0 {
-		p.UnmappedSize = segAlign
-	}
-
-	// TODO(rsc): addr := Addr(0) when generating a shared library or PIE.
-	addr := p.UnmappedSize
-
-	// Account for initial file header.
-	hdrVirt, hdrFile := p.formatter.headerSize(p)
-	addr += hdrVirt
-
-	// Assign addresses to segments, sections, symbols.
-	// Assign sizes to segments, sections.
-	startVirt := addr
-	startFile := hdrFile
-	for _, seg := range p.Segments {
-		addr = round(addr, segAlign)
-		seg.VirtAddr = addr
-		seg.FileOffset = startFile + seg.VirtAddr - startVirt
-		for _, sect := range seg.Sections {
-			addr = round(addr, sect.Align)
-			sect.VirtAddr = addr
-			for _, sym := range sect.Syms {
-				// TODO(rsc): Respect alignment once we have that information.
-				sym.Addr = addr
-				addr += Addr(sym.Size)
-			}
-			sect.Size = addr - sect.VirtAddr
-			if sect.InFile {
-				seg.FileSize = addr - seg.VirtAddr
-			}
-		}
-		seg.VirtSize = addr - seg.VirtAddr
-	}
-
-	// Define symbols for section names.
-	var progEnd Addr
-	for i, sect := range sections {
-		name := layout[i].Section
-		var start, end Addr
-		if sect != nil {
-			start = sect.VirtAddr
-			end = sect.VirtAddr + sect.Size
-		}
-		p.defineConst("runtime."+name, start)
-		p.defineConst("runtime.e"+name, end)
-		progEnd = end
-	}
-	p.defineConst("runtime.end", progEnd)
-}
diff --git a/src/cmd/newlink/layout_test.go b/src/cmd/newlink/layout_test.go
deleted file mode 100644
index e5513af..0000000
--- a/src/cmd/newlink/layout_test.go
+++ /dev/null
@@ -1,45 +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.
-
-package main
-
-import (
-	"bytes"
-	"strings"
-	"testing"
-)
-
-func TestLayout(t *testing.T) {
-	p := Prog{GOOS: "darwin", GOARCH: "amd64", StartSym: "text_start"}
-	p.omitRuntime = true
-	p.Error = func(s string) { t.Error(s) }
-	var buf bytes.Buffer
-	const obj = "testdata/layout.6"
-	p.link(&buf, obj)
-	if p.NumError > 0 {
-		return // already reported
-	}
-	if len(p.Dead) > 0 {
-		t.Errorf("%s: unexpected dead symbols %v", obj, p.Dead)
-		return
-	}
-
-	for _, sym := range p.SymOrder {
-		if p.isAuto(sym.SymID) {
-			continue
-		}
-		if sym.Section == nil {
-			t.Errorf("%s: symbol %s is missing section", obj, sym)
-			continue
-		}
-		i := strings.Index(sym.Name, "_")
-		if i < 0 {
-			t.Errorf("%s: unexpected symbol %s", obj, sym)
-			continue
-		}
-		if sym.Section.Name != sym.Name[:i] {
-			t.Errorf("%s: symbol %s in section %s, want %s", obj, sym, sym.Section.Name, sym.Name[:i])
-		}
-	}
-}
diff --git a/src/cmd/newlink/link_test.go b/src/cmd/newlink/link_test.go
deleted file mode 100644
index b5ae15f..0000000
--- a/src/cmd/newlink/link_test.go
+++ /dev/null
@@ -1,35 +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.
-
-package main
-
-import (
-	"bytes"
-	"cmd/internal/goobj"
-	"io/ioutil"
-	"testing"
-)
-
-func TestLinkHello(t *testing.T) {
-	p := &Prog{
-		GOOS:     "darwin",
-		GOARCH:   "amd64",
-		Error:    func(s string) { t.Error(s) },
-		StartSym: "_rt0_go",
-	}
-	var buf bytes.Buffer
-	p.link(&buf, "testdata/hello.6")
-	if p.NumError > 0 {
-		return
-	}
-	if p.Syms[goobj.SymID{"_rt0_go", 0}] == nil || p.Syms[goobj.SymID{"hello", 1}] == nil {
-		t.Errorf("Syms = %v, want at least [_rt0_go hello<1>]", p.Syms)
-	}
-
-	// uncomment to leave file behind for execution:
-	if false {
-		ioutil.WriteFile("a.out", buf.Bytes(), 0777)
-	}
-	checkGolden(t, buf.Bytes(), "testdata/link.hello.darwin.amd64")
-}
diff --git a/src/cmd/newlink/load.go b/src/cmd/newlink/load.go
deleted file mode 100644
index 50602b8..0000000
--- a/src/cmd/newlink/load.go
+++ /dev/null
@@ -1,108 +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.
-
-// Loading of code and data fragments from package files into final image.
-
-package main
-
-import (
-	"cmd/internal/obj"
-	"os"
-)
-
-// load allocates segment images, populates them with data
-// read from package files, and applies relocations to the data.
-func (p *Prog) load() {
-	// TODO(rsc): mmap the output file and store the data directly.
-	// That will make writing the output file more efficient.
-	for _, seg := range p.Segments {
-		seg.Data = make([]byte, seg.FileSize)
-	}
-	for _, pkg := range p.Packages {
-		p.loadPackage(pkg)
-	}
-}
-
-// loadPackage loads and relocates data for all the
-// symbols needed in the given package.
-func (p *Prog) loadPackage(pkg *Package) {
-	if pkg.File == "" {
-		// This "package" contains internally generated symbols only.
-		// All such symbols have a sym.Bytes field holding the actual data
-		// (if any), plus relocations.
-		for _, sym := range pkg.Syms {
-			if sym.Bytes == nil {
-				continue
-			}
-			seg := sym.Section.Segment
-			off := sym.Addr - seg.VirtAddr
-			data := seg.Data[off : off+Addr(sym.Size)]
-			copy(data, sym.Bytes)
-			p.relocateSym(sym, data)
-		}
-		return
-	}
-
-	// Package stored in file.
-	f, err := os.Open(pkg.File)
-	if err != nil {
-		p.errorf("%v", err)
-		return
-	}
-	defer f.Close()
-
-	// TODO(rsc): Mmap file into memory.
-
-	for _, sym := range pkg.Syms {
-		if sym.Data.Size == 0 {
-			continue
-		}
-		// TODO(rsc): If not using mmap, at least coalesce nearby reads.
-		if sym.Section == nil {
-			p.errorf("internal error: missing section for %s", sym.Name)
-		}
-		seg := sym.Section.Segment
-		off := sym.Addr - seg.VirtAddr
-		if off >= Addr(len(seg.Data)) || off+Addr(sym.Data.Size) > Addr(len(seg.Data)) {
-			p.errorf("internal error: allocated space for %s too small: %d bytes for %d+%d (%d)", sym, len(seg.Data), off, sym.Data.Size, sym.Size)
-		}
-		data := seg.Data[off : off+Addr(sym.Data.Size)]
-		_, err := f.ReadAt(data, sym.Data.Offset)
-		if err != nil {
-			p.errorf("reading %v: %v", sym.SymID, err)
-		}
-		p.relocateSym(sym, data)
-	}
-}
-
-// relocateSym applies relocations to sym's data.
-func (p *Prog) relocateSym(sym *Sym, data []byte) {
-	for i := range sym.Reloc {
-		r := &sym.Reloc[i]
-		targ := p.Syms[r.Sym]
-		if targ == nil {
-			p.errorf("%v: reference to undefined symbol %v", sym, r.Sym)
-			continue
-		}
-		val := targ.Addr + Addr(r.Add)
-		switch r.Type {
-		default:
-			p.errorf("%v: unknown relocation type %d", sym, r.Type)
-		case obj.R_ADDR, obj.R_CALLIND:
-			// ok
-		case obj.R_PCREL, obj.R_CALL:
-			val -= sym.Addr + Addr(r.Offset+r.Size)
-		}
-		frag := data[r.Offset : r.Offset+r.Size]
-		switch r.Size {
-		default:
-			p.errorf("%v: unknown relocation size %d", sym, r.Size)
-		case 4:
-			// TODO(rsc): Check for overflow?
-			p.byteorder.PutUint32(frag, uint32(val))
-		case 8:
-			p.byteorder.PutUint64(frag, uint64(val))
-		}
-	}
-}
diff --git a/src/cmd/newlink/macho.go b/src/cmd/newlink/macho.go
deleted file mode 100644
index 4e5524b..0000000
--- a/src/cmd/newlink/macho.go
+++ /dev/null
@@ -1,380 +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.
-
-// Mach-O (Darwin) object file writing.
-
-package main
-
-import (
-	"debug/macho"
-	"encoding/binary"
-	"io"
-	"strings"
-)
-
-// machoFormat is the implementation of formatter.
-type machoFormat struct{}
-
-// machoHeader and friends are data structures
-// corresponding to the Mach-O file header
-// to be written to disk.
-
-const (
-	macho64Bit     = 1 << 24
-	machoSubCPU386 = 3
-)
-
-// machoArch describes a Mach-O target architecture.
-type machoArch struct {
-	CPU    uint32
-	SubCPU uint32
-}
-
-// machoHeader is the Mach-O file header.
-type machoHeader struct {
-	machoArch
-	FileType uint32
-	Loads    []*machoLoad
-	Segments []*machoSegment
-	p        *Prog // for reporting errors
-}
-
-// machoLoad is a Mach-O load command.
-type machoLoad struct {
-	Type uint32
-	Data []uint32
-}
-
-// machoSegment is a Mach-O segment.
-type machoSegment struct {
-	Name       string
-	VirtAddr   Addr
-	VirtSize   Addr
-	FileOffset Addr
-	FileSize   Addr
-	Prot1      uint32
-	Prot2      uint32
-	Flags      uint32
-	Sections   []*machoSection
-}
-
-// machoSection is a Mach-O section, inside a segment.
-type machoSection struct {
-	Name    string
-	Segment string
-	Addr    Addr
-	Size    Addr
-	Offset  uint32
-	Align   uint32
-	Reloc   uint32
-	Nreloc  uint32
-	Flags   uint32
-	Res1    uint32
-	Res2    uint32
-}
-
-// layout positions the segments and sections in p
-// to make room for the Mach-O file header.
-// That is, it edits their VirtAddr fields to adjust for the presence
-// of the Mach-O header at the beginning of the address space.
-func (machoFormat) headerSize(p *Prog) (virt, file Addr) {
-	var h machoHeader
-	h.init(p)
-	size := Addr(h.size())
-	size = round(size, 4096)
-	p.HeaderSize = size
-	return size, size
-}
-
-// write writes p to w as a Mach-O executable.
-// layout(p) must have already been called,
-// and the number, sizes, and addresses of the segments
-// and sections must not have been modified since the call.
-func (machoFormat) write(w io.Writer, p *Prog) {
-	var h machoHeader
-	h.init(p)
-	off := Addr(0)
-	enc := h.encode()
-	w.Write(enc)
-	off += Addr(len(enc))
-	for _, seg := range p.Segments {
-		if seg.FileOffset < off {
-			h.p.errorf("mach-o error: invalid file offset")
-		}
-		w.Write(make([]byte, int(seg.FileOffset-off)))
-		if seg.FileSize != Addr(len(seg.Data)) {
-			h.p.errorf("mach-o error: invalid file size")
-		}
-		w.Write(seg.Data)
-		off = seg.FileOffset + Addr(len(seg.Data))
-	}
-}
-
-// Conversion of Prog to macho data structures.
-
-// machoArches maps from GOARCH to machoArch.
-var machoArches = map[string]machoArch{
-	"amd64": {
-		CPU:    uint32(macho.CpuAmd64),
-		SubCPU: uint32(machoSubCPU386),
-	},
-}
-
-// init initializes the header h to describe p.
-func (h *machoHeader) init(p *Prog) {
-	h.p = p
-	h.Segments = nil
-	h.Loads = nil
-	var ok bool
-	h.machoArch, ok = machoArches[p.GOARCH]
-	if !ok {
-		p.errorf("mach-o: unknown target GOARCH %q", p.GOARCH)
-		return
-	}
-	h.FileType = uint32(macho.TypeExec)
-
-	mseg := h.addSegment(p, "__PAGEZERO", nil)
-	mseg.VirtSize = p.UnmappedSize
-
-	for _, seg := range p.Segments {
-		h.addSegment(p, "__"+strings.ToUpper(seg.Name), seg)
-	}
-
-	var data []uint32
-	switch h.CPU {
-	default:
-		p.errorf("mach-o: unknown cpu %#x for GOARCH %q", h.CPU, p.GOARCH)
-	case uint32(macho.CpuAmd64):
-		data = make([]uint32, 2+42)
-		data[0] = 4                  // thread type
-		data[1] = 42                 // word count
-		data[2+32] = uint32(p.Entry) // RIP register, in two parts
-		data[2+32+1] = uint32(p.Entry >> 32)
-	}
-
-	h.Loads = append(h.Loads, &machoLoad{
-		Type: uint32(macho.LoadCmdUnixThread),
-		Data: data,
-	})
-}
-
-// addSegment adds to h a Mach-O segment like seg with the given name.
-func (h *machoHeader) addSegment(p *Prog, name string, seg *Segment) *machoSegment {
-	mseg := &machoSegment{
-		Name: name,
-	}
-	h.Segments = append(h.Segments, mseg)
-	if seg == nil {
-		return mseg
-	}
-
-	mseg.VirtAddr = seg.VirtAddr
-	mseg.VirtSize = seg.VirtSize
-	mseg.FileOffset = round(seg.FileOffset, 4096)
-	mseg.FileSize = seg.FileSize
-
-	if name == "__TEXT" {
-		// Initially RWX, then just RX
-		mseg.Prot1 = 7
-		mseg.Prot2 = 5
-
-		// Text segment maps Mach-O header, needed by dynamic linker.
-		mseg.VirtAddr -= p.HeaderSize
-		mseg.VirtSize += p.HeaderSize
-		mseg.FileOffset -= p.HeaderSize
-		mseg.FileSize += p.HeaderSize
-	} else {
-		// RW
-		mseg.Prot1 = 3
-		mseg.Prot2 = 3
-	}
-
-	for _, sect := range seg.Sections {
-		h.addSection(mseg, seg, sect)
-	}
-	return mseg
-}
-
-// addSection adds to mseg a Mach-O section like sect, inside seg, with the given name.
-func (h *machoHeader) addSection(mseg *machoSegment, seg *Segment, sect *Section) {
-	msect := &machoSection{
-		Name:    "__" + sect.Name,
-		Segment: mseg.Name,
-		// Reloc: sect.RelocOffset,
-		// NumReloc: sect.RelocLen / 8,
-		Addr: sect.VirtAddr,
-		Size: sect.Size,
-	}
-	mseg.Sections = append(mseg.Sections, msect)
-
-	for 1<<msect.Align < sect.Align {
-		msect.Align++
-	}
-
-	if off := sect.VirtAddr - seg.VirtAddr; off < seg.FileSize {
-		// Data in file.
-		if sect.Size > seg.FileSize-off {
-			h.p.errorf("mach-o error: section crosses file boundary")
-		}
-		msect.Offset = uint32(seg.FileOffset + off)
-	} else {
-		// Zero filled.
-		msect.Flags |= 1
-	}
-
-	if sect.Name == "text" {
-		msect.Flags |= 0x400 // contains executable instructions
-	}
-}
-
-// A machoWriter helps write Mach-O headers.
-// It is basically a buffer with some helper routines for writing integers.
-type machoWriter struct {
-	dst   []byte
-	tmp   [8]byte
-	order binary.ByteOrder
-	is64  bool
-	p     *Prog
-}
-
-// if64 returns x if w is writing a 64-bit object file; otherwise it returns y.
-func (w *machoWriter) if64(x, y interface{}) interface{} {
-	if w.is64 {
-		return x
-	}
-	return y
-}
-
-// encode encodes each of the given arguments into the writer.
-// It encodes uint32, []uint32, uint64, and []uint64 by writing each value
-// in turn in the correct byte order for the output file.
-// It encodes an Addr as a uint64 if writing a 64-bit output file, or else as a uint32.
-// It encodes []byte and string by writing the raw bytes (no length prefix).
-// It skips nil values in the args list.
-func (w *machoWriter) encode(args ...interface{}) {
-	for _, arg := range args {
-		switch arg := arg.(type) {
-		default:
-			w.p.errorf("mach-o error: cannot encode %T", arg)
-		case nil:
-			// skip
-		case []byte:
-			w.dst = append(w.dst, arg...)
-		case string:
-			w.dst = append(w.dst, arg...)
-		case uint32:
-			w.order.PutUint32(w.tmp[:], arg)
-			w.dst = append(w.dst, w.tmp[:4]...)
-		case []uint32:
-			for _, x := range arg {
-				w.order.PutUint32(w.tmp[:], x)
-				w.dst = append(w.dst, w.tmp[:4]...)
-			}
-		case uint64:
-			w.order.PutUint64(w.tmp[:], arg)
-			w.dst = append(w.dst, w.tmp[:8]...)
-		case Addr:
-			if w.is64 {
-				w.order.PutUint64(w.tmp[:], uint64(arg))
-				w.dst = append(w.dst, w.tmp[:8]...)
-			} else {
-				if Addr(uint32(arg)) != arg {
-					w.p.errorf("mach-o error: truncating address %#x to uint32", arg)
-				}
-				w.order.PutUint32(w.tmp[:], uint32(arg))
-				w.dst = append(w.dst, w.tmp[:4]...)
-			}
-		}
-	}
-}
-
-// segmentSize returns the size of the encoding of seg in bytes.
-func (w *machoWriter) segmentSize(seg *machoSegment) int {
-	if w.is64 {
-		return 18*4 + 20*4*len(seg.Sections)
-	}
-	return 14*4 + 22*4*len(seg.Sections)
-}
-
-// zeroPad returns the string s truncated or padded with NULs to n bytes.
-func zeroPad(s string, n int) string {
-	if len(s) >= n {
-		return s[:n]
-	}
-	return s + strings.Repeat("\x00", n-len(s))
-}
-
-// size returns the encoded size of the header.
-func (h *machoHeader) size() int {
-	// Could write separate code, but encoding is cheap; encode and throw it away.
-	return len(h.encode())
-}
-
-// encode returns the Mach-O encoding of the header.
-func (h *machoHeader) encode() []byte {
-	w := &machoWriter{p: h.p}
-	w.is64 = h.CPU&macho64Bit != 0
-	w.order = w.p.byteorder
-
-	loadSize := 0
-	for _, seg := range h.Segments {
-		loadSize += w.segmentSize(seg)
-	}
-	for _, l := range h.Loads {
-		loadSize += 4 * (2 + len(l.Data))
-	}
-
-	w.encode(
-		w.if64(macho.Magic64, macho.Magic32),
-		uint32(h.CPU),
-		uint32(h.SubCPU),
-		uint32(h.FileType),
-		uint32(len(h.Loads)+len(h.Segments)),
-		uint32(loadSize),
-		uint32(1),
-		w.if64(uint32(0), nil),
-	)
-
-	for _, seg := range h.Segments {
-		w.encode(
-			w.if64(uint32(macho.LoadCmdSegment64), uint32(macho.LoadCmdSegment)),
-			uint32(w.segmentSize(seg)),
-			zeroPad(seg.Name, 16),
-			seg.VirtAddr,
-			seg.VirtSize,
-			seg.FileOffset,
-			seg.FileSize,
-			seg.Prot1,
-			seg.Prot2,
-			uint32(len(seg.Sections)),
-			seg.Flags,
-		)
-		for _, sect := range seg.Sections {
-			w.encode(
-				zeroPad(sect.Name, 16),
-				zeroPad(seg.Name, 16),
-				sect.Addr,
-				sect.Size,
-				sect.Offset,
-				sect.Align,
-				sect.Reloc,
-				sect.Nreloc,
-				sect.Flags,
-				sect.Res1,
-				sect.Res2,
-				w.if64(uint32(0), nil),
-			)
-		}
-	}
-
-	for _, load := range h.Loads {
-		w.encode(
-			load.Type,
-			uint32(4*(2+len(load.Data))),
-			load.Data,
-		)
-	}
-
-	return w.dst
-}
diff --git a/src/cmd/newlink/macho_test.go b/src/cmd/newlink/macho_test.go
deleted file mode 100644
index 37c4418..0000000
--- a/src/cmd/newlink/macho_test.go
+++ /dev/null
@@ -1,407 +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.
-
-package main
-
-import (
-	"bytes"
-	"debug/macho"
-	"encoding/binary"
-	"fmt"
-	"io/ioutil"
-	"strings"
-	"testing"
-)
-
-// Test macho writing by checking that each generated prog can be written
-// and then read back using debug/macho to get the same prog.
-// Also check against golden testdata file.
-var machoWriteTests = []struct {
-	name   string
-	golden bool
-	prog   *Prog
-}{
-	// amd64 exit 9
-	{
-		name:   "exit9",
-		golden: true,
-		prog: &Prog{
-			GOARCH:       "amd64",
-			GOOS:         "darwin",
-			UnmappedSize: 0x1000,
-			Entry:        0x1000,
-			Segments: []*Segment{
-				{
-					Name:       "text",
-					VirtAddr:   0x1000,
-					VirtSize:   13,
-					FileOffset: 0,
-					FileSize:   13,
-					Data: []byte{
-						0xb8, 0x01, 0x00, 0x00, 0x02, // MOVL $0x2000001, AX
-						0xbf, 0x09, 0x00, 0x00, 0x00, // MOVL $9, DI
-						0x0f, 0x05, // SYSCALL
-						0xf4, // HLT
-					},
-					Sections: []*Section{
-						{
-							Name:     "text",
-							VirtAddr: 0x1000,
-							Size:     13,
-							Align:    64,
-						},
-					},
-				},
-			},
-		},
-	},
-
-	// amd64 write hello world & exit 9
-	{
-		name:   "hello",
-		golden: true,
-		prog: &Prog{
-			GOARCH:       "amd64",
-			GOOS:         "darwin",
-			UnmappedSize: 0x1000,
-			Entry:        0x1000,
-			Segments: []*Segment{
-				{
-					Name:       "text",
-					VirtAddr:   0x1000,
-					VirtSize:   35,
-					FileOffset: 0,
-					FileSize:   35,
-					Data: []byte{
-						0xb8, 0x04, 0x00, 0x00, 0x02, // MOVL $0x2000001, AX
-						0xbf, 0x01, 0x00, 0x00, 0x00, // MOVL $1, DI
-						0xbe, 0x00, 0x30, 0x00, 0x00, // MOVL $0x3000, SI
-						0xba, 0x0c, 0x00, 0x00, 0x00, // MOVL $12, DX
-						0x0f, 0x05, // SYSCALL
-						0xb8, 0x01, 0x00, 0x00, 0x02, // MOVL $0x2000001, AX
-						0xbf, 0x09, 0x00, 0x00, 0x00, // MOVL $9, DI
-						0x0f, 0x05, // SYSCALL
-						0xf4, // HLT
-					},
-					Sections: []*Section{
-						{
-							Name:     "text",
-							VirtAddr: 0x1000,
-							Size:     35,
-							Align:    64,
-						},
-					},
-				},
-				{
-					Name:       "data",
-					VirtAddr:   0x2000,
-					VirtSize:   12,
-					FileOffset: 0x1000,
-					FileSize:   12,
-					Data:       []byte("hello world\n"),
-					Sections: []*Section{
-						{
-							Name:     "data",
-							VirtAddr: 0x2000,
-							Size:     12,
-							Align:    64,
-						},
-					},
-				},
-			},
-		},
-	},
-
-	// amd64 write hello world from rodata & exit 0
-	{
-		name:   "helloro",
-		golden: true,
-		prog: &Prog{
-			GOARCH:       "amd64",
-			GOOS:         "darwin",
-			UnmappedSize: 0x1000,
-			Entry:        0x1000,
-			Segments: []*Segment{
-				{
-					Name:       "text",
-					VirtAddr:   0x1000,
-					VirtSize:   0x100c,
-					FileOffset: 0,
-					FileSize:   0x100c,
-					Data: concat(
-						[]byte{
-							0xb8, 0x04, 0x00, 0x00, 0x02, // MOVL $0x2000001, AX
-							0xbf, 0x01, 0x00, 0x00, 0x00, // MOVL $1, DI
-							0xbe, 0x00, 0x30, 0x00, 0x00, // MOVL $0x3000, SI
-							0xba, 0x0c, 0x00, 0x00, 0x00, // MOVL $12, DX
-							0x0f, 0x05, // SYSCALL
-							0xb8, 0x01, 0x00, 0x00, 0x02, // MOVL $0x2000001, AX
-							0xbf, 0x00, 0x00, 0x00, 0x00, // MOVL $0, DI
-							0x0f, 0x05, // SYSCALL
-							0xf4, // HLT
-						},
-						make([]byte, 0x1000-35),
-						[]byte("hello world\n"),
-					),
-					Sections: []*Section{
-						{
-							Name:     "text",
-							VirtAddr: 0x1000,
-							Size:     35,
-							Align:    64,
-						},
-						{
-							Name:     "rodata",
-							VirtAddr: 0x2000,
-							Size:     12,
-							Align:    64,
-						},
-					},
-				},
-			},
-		},
-	},
-}
-
-func concat(xs ...[]byte) []byte {
-	var out []byte
-	for _, x := range xs {
-		out = append(out, x...)
-	}
-	return out
-}
-
-func TestMachoWrite(t *testing.T) {
-	for _, tt := range machoWriteTests {
-		name := tt.prog.GOARCH + "." + tt.name
-		prog := cloneProg(tt.prog)
-		prog.init()
-		var f machoFormat
-		vsize, fsize := f.headerSize(prog)
-		shiftProg(prog, vsize, fsize)
-		var buf bytes.Buffer
-		f.write(&buf, prog)
-		if false { // enable to debug
-			ioutil.WriteFile("a.out", buf.Bytes(), 0777)
-		}
-		read, err := machoRead(machoArches[tt.prog.GOARCH], buf.Bytes())
-		if err != nil {
-			t.Errorf("%s: reading mach-o output:\n\t%v", name, err)
-			continue
-		}
-		diffs := diffProg(read, prog)
-		if diffs != nil {
-			t.Errorf("%s: mismatched prog:\n\t%s", name, strings.Join(diffs, "\n\t"))
-			continue
-		}
-		if !tt.golden {
-			continue
-		}
-		checkGolden(t, buf.Bytes(), "testdata/macho."+name)
-	}
-}
-
-// machoRead reads the mach-o file in data and returns a corresponding prog.
-func machoRead(arch machoArch, data []byte) (*Prog, error) {
-	f, err := macho.NewFile(bytes.NewReader(data))
-	if err != nil {
-		return nil, err
-	}
-
-	var errors []string
-	errorf := func(format string, args ...interface{}) {
-		errors = append(errors, fmt.Sprintf(format, args...))
-	}
-
-	magic := uint32(0xFEEDFACE)
-	if arch.CPU&macho64Bit != 0 {
-		magic |= 1
-	}
-	if f.Magic != magic {
-		errorf("header: Magic = %#x, want %#x", f.Magic, magic)
-	}
-	if f.Cpu != macho.CpuAmd64 {
-		errorf("header: CPU = %#x, want %#x", f.Cpu, macho.CpuAmd64)
-	}
-	if f.SubCpu != 3 {
-		errorf("header: SubCPU = %#x, want %#x", f.SubCpu, 3)
-	}
-	if f.Type != 2 {
-		errorf("header: FileType = %d, want %d", f.Type, 2)
-	}
-	if f.Flags != 1 {
-		errorf("header: Flags = %d, want %d", f.Flags, 1)
-	}
-
-	msects := f.Sections
-	var limit uint64
-	prog := new(Prog)
-	for _, load := range f.Loads {
-		switch load := load.(type) {
-		default:
-			errorf("unexpected macho load %T %x", load, load.Raw())
-
-		case macho.LoadBytes:
-			if len(load) < 8 || len(load)%4 != 0 {
-				errorf("unexpected load length %d", len(load))
-				continue
-			}
-			cmd := f.ByteOrder.Uint32(load)
-			switch macho.LoadCmd(cmd) {
-			default:
-				errorf("unexpected macho load cmd %s", macho.LoadCmd(cmd))
-			case macho.LoadCmdUnixThread:
-				data := make([]uint32, len(load[8:])/4)
-				binary.Read(bytes.NewReader(load[8:]), f.ByteOrder, data)
-				if len(data) != 44 {
-					errorf("macho thread len(data) = %d, want 42", len(data))
-					continue
-				}
-				if data[0] != 4 {
-					errorf("macho thread type = %d, want 4", data[0])
-				}
-				if data[1] != uint32(len(data))-2 {
-					errorf("macho thread desc len = %d, want %d", data[1], uint32(len(data))-2)
-					continue
-				}
-				for i, val := range data[2:] {
-					switch i {
-					default:
-						if val != 0 {
-							errorf("macho thread data[%d] = %#x, want 0", i, val)
-						}
-					case 32:
-						prog.Entry = Addr(val)
-					case 33:
-						prog.Entry |= Addr(val) << 32
-					}
-				}
-			}
-
-		case *macho.Segment:
-			if load.Addr < limit {
-				errorf("segments out of order: %q at %#x after %#x", load.Name, load.Addr, limit)
-			}
-			limit = load.Addr + load.Memsz
-			if load.Name == "__PAGEZERO" || load.Addr == 0 && load.Filesz == 0 {
-				if load.Name != "__PAGEZERO" {
-					errorf("segment with Addr=0, Filesz=0 is named %q, want %q", load.Name, "__PAGEZERO")
-				} else if load.Addr != 0 || load.Filesz != 0 {
-					errorf("segment %q has Addr=%#x, Filesz=%d, want Addr=%#x, Filesz=%d", load.Name, load.Addr, load.Filesz, 0, 0)
-				}
-				prog.UnmappedSize = Addr(load.Memsz)
-				continue
-			}
-
-			if !strings.HasPrefix(load.Name, "__") {
-				errorf("segment name %q does not begin with %q", load.Name, "__")
-			}
-			if strings.ToUpper(load.Name) != load.Name {
-				errorf("segment name %q is not all upper case", load.Name)
-			}
-
-			seg := &Segment{
-				Name:       strings.ToLower(strings.TrimPrefix(load.Name, "__")),
-				VirtAddr:   Addr(load.Addr),
-				VirtSize:   Addr(load.Memsz),
-				FileOffset: Addr(load.Offset),
-				FileSize:   Addr(load.Filesz),
-			}
-			prog.Segments = append(prog.Segments, seg)
-
-			data, err := load.Data()
-			if err != nil {
-				errorf("loading data from %q: %v", load.Name, err)
-			}
-			seg.Data = data
-
-			var maxprot, prot uint32
-			if load.Name == "__TEXT" {
-				maxprot, prot = 7, 5
-			} else {
-				maxprot, prot = 3, 3
-			}
-			if load.Maxprot != maxprot || load.Prot != prot {
-				errorf("segment %q protection is %d, %d, want %d, %d",
-					load.Name, load.Maxprot, load.Prot, maxprot, prot)
-			}
-
-			for len(msects) > 0 && msects[0].Addr < load.Addr+load.Memsz {
-				msect := msects[0]
-				msects = msects[1:]
-
-				if msect.Offset > 0 && prog.HeaderSize == 0 {
-					prog.HeaderSize = Addr(msect.Offset)
-					if seg.FileOffset != 0 {
-						errorf("initial segment %q does not map header", load.Name)
-					}
-					seg.VirtAddr += prog.HeaderSize
-					seg.VirtSize -= prog.HeaderSize
-					seg.FileOffset += prog.HeaderSize
-					seg.FileSize -= prog.HeaderSize
-					seg.Data = seg.Data[prog.HeaderSize:]
-				}
-
-				if msect.Addr < load.Addr {
-					errorf("section %q at address %#x is missing segment", msect.Name, msect.Addr)
-					continue
-				}
-
-				if !strings.HasPrefix(msect.Name, "__") {
-					errorf("section name %q does not begin with %q", msect.Name, "__")
-				}
-				if strings.ToLower(msect.Name) != msect.Name {
-					errorf("section name %q is not all lower case", msect.Name)
-				}
-				if msect.Seg != load.Name {
-					errorf("section %q is lists segment name %q, want %q",
-						msect.Name, msect.Seg, load.Name)
-				}
-				if uint64(msect.Offset) != uint64(load.Offset)+msect.Addr-load.Addr {
-					errorf("section %q file offset is %#x, want %#x",
-						msect.Name, msect.Offset, load.Offset+msect.Addr-load.Addr)
-				}
-				if msect.Reloff != 0 || msect.Nreloc != 0 {
-					errorf("section %q has reloff %d,%d, want %d,%d",
-						msect.Name, msect.Reloff, msect.Nreloc, 0, 0)
-				}
-				flags := uint32(0)
-				if msect.Name == "__text" {
-					flags = 0x400
-				}
-				if msect.Offset == 0 {
-					flags = 1
-				}
-				if msect.Flags != flags {
-					errorf("section %q flags = %#x, want %#x", msect.Name, msect.Flags, flags)
-				}
-				sect := &Section{
-					Name:     strings.ToLower(strings.TrimPrefix(msect.Name, "__")),
-					VirtAddr: Addr(msect.Addr),
-					Size:     Addr(msect.Size),
-					Align:    1 << msect.Align,
-				}
-				seg.Sections = append(seg.Sections, sect)
-			}
-		}
-	}
-
-	for _, msect := range msects {
-		errorf("section %q has no segment", msect.Name)
-	}
-
-	limit = 0
-	for _, msect := range f.Sections {
-		if msect.Addr < limit {
-			errorf("sections out of order: %q at %#x after %#x", msect.Name, msect.Addr, limit)
-		}
-		limit = msect.Addr + msect.Size
-	}
-
-	err = nil
-	if errors != nil {
-		err = fmt.Errorf("%s", strings.Join(errors, "\n\t"))
-	}
-	return prog, err
-}
diff --git a/src/cmd/newlink/main.go b/src/cmd/newlink/main.go
deleted file mode 100644
index b23f3f8..0000000
--- a/src/cmd/newlink/main.go
+++ /dev/null
@@ -1,9 +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.
-
-// Placeholder to keep build building.
-
-package main
-
-func main() {}
diff --git a/src/cmd/newlink/pclntab.go b/src/cmd/newlink/pclntab.go
deleted file mode 100644
index 0a4cfc9..0000000
--- a/src/cmd/newlink/pclntab.go
+++ /dev/null
@@ -1,480 +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.
-
-// Generation of runtime function information (pclntab).
-
-package main
-
-import (
-	"cmd/internal/goobj"
-	"cmd/internal/obj"
-	"encoding/binary"
-	"os"
-	"sort"
-)
-
-var zerofunc goobj.Func
-
-// pclntab collects the runtime function data for each function that will
-// be listed in the binary and builds a single table describing all functions.
-// This table is used at run time for stack traces and to look up PC-specific
-// information during garbage collection. The symbol created is named
-// "pclntab" for historical reasons; the scope of the table has grown to
-// include more than just PC/line number correspondences.
-// The table format is documented at https://golang.org/s/go12symtab.
-func (p *Prog) pclntab() {
-	// Count number of functions going into the binary,
-	// so that we can size the initial index correctly.
-	nfunc := 0
-	for _, sym := range p.SymOrder {
-		if sym.Kind != goobj.STEXT {
-			continue
-		}
-		nfunc++
-	}
-
-	// Table header.
-	buf := new(SymBuffer)
-	buf.Init(p)
-	buf.SetSize(8 + p.ptrsize)
-	off := 0
-	off = buf.Uint32(off, 0xfffffffb)
-	off = buf.Uint8(off, 0)
-	off = buf.Uint8(off, 0)
-	off = buf.Uint8(off, uint8(p.pcquantum))
-	off = buf.Uint8(off, uint8(p.ptrsize))
-	off = buf.Uint(off, uint64(nfunc), p.ptrsize)
-	indexOff := off
-	off += (nfunc*2 + 1) * p.ptrsize // function index, to be filled in
-	off += 4                         // file table start offset, to be filled in
-	buf.SetSize(off)
-
-	// One-file cache for reading PCData tables from package files.
-	// TODO(rsc): Better I/O strategy.
-	var (
-		file  *os.File
-		fname string
-	)
-
-	// Files gives the file numbering for source file names recorded
-	// in the binary.
-	files := make(map[string]int)
-
-	// Build the table, build the index, and build the file name numbering.
-	// The loop here must visit functions in the same order that they will
-	// be stored in the binary, or else binary search over the index will fail.
-	// The runtime checks that the index is sorted properly at program start time.
-	var lastSym *Sym
-	for _, sym := range p.SymOrder {
-		if sym.Kind != goobj.STEXT {
-			continue
-		}
-		lastSym = sym
-
-		// Treat no recorded function information same as all zeros.
-		f := sym.Func
-		if f == nil {
-			f = &zerofunc
-		}
-
-		// Open package file if needed, for reading PC data.
-		if fname != sym.Package.File {
-			if file != nil {
-				file.Close()
-			}
-			var err error
-			file, err = os.Open(sym.Package.File)
-			if err != nil {
-				p.errorf("%v: %v", sym, err)
-				return
-			}
-			fname = sym.Package.File
-		}
-
-		// off is the offset of the table entry where we're going to write
-		// the encoded form of Func.
-		// indexOff is the current position in the table index;
-		// we add an entry in the index pointing at off.
-		off = (buf.Size() + p.ptrsize - 1) &^ (p.ptrsize - 1)
-		indexOff = buf.Addr(indexOff, sym.SymID, 0)
-		indexOff = buf.Uint(indexOff, uint64(off), p.ptrsize)
-
-		// The Func encoding starts with a header giving offsets
-		// to data blobs, and then the data blobs themselves.
-		// end gives the current write position for the data blobs.
-		end := off + p.ptrsize + 3*4 + 5*4 + len(f.PCData)*4 + len(f.FuncData)*p.ptrsize
-		if len(f.FuncData) > 0 {
-			end += -end & (p.ptrsize - 1)
-		}
-		buf.SetSize(end)
-
-		// entry uintptr
-		// name int32
-		// args int32
-		// frame int32
-		//
-		// The frame recorded in the object file is
-		// the frame size used in an assembly listing, which does
-		// not include the caller PC on the stack.
-		// The frame size we want to list here is the delta from
-		// this function's SP to its caller's SP, which does include
-		// the caller PC. Add p.ptrsize to f.Frame to adjust.
-		// TODO(rsc): Record the same frame size in the object file.
-		off = buf.Addr(off, sym.SymID, 0)
-		off = buf.Uint32(off, uint32(addString(buf, sym.Name)))
-		off = buf.Uint32(off, uint32(f.Args))
-		off = buf.Uint32(off, uint32(f.Frame+p.ptrsize))
-
-		// pcdata
-		off = buf.Uint32(off, uint32(addPCTable(p, buf, file, f.PCSP)))
-		off = buf.Uint32(off, uint32(addPCFileTable(p, buf, file, f.PCFile, sym, files)))
-		off = buf.Uint32(off, uint32(addPCTable(p, buf, file, f.PCLine)))
-		off = buf.Uint32(off, uint32(len(f.PCData)))
-		off = buf.Uint32(off, uint32(len(f.FuncData)))
-		for _, pcdata := range f.PCData {
-			off = buf.Uint32(off, uint32(addPCTable(p, buf, file, pcdata)))
-		}
-
-		// funcdata
-		if len(f.FuncData) > 0 {
-			off += -off & (p.ptrsize - 1) // must be pointer-aligned
-			for _, funcdata := range f.FuncData {
-				if funcdata.Sym.Name == "" {
-					off = buf.Uint(off, uint64(funcdata.Offset), p.ptrsize)
-				} else {
-					off = buf.Addr(off, funcdata.Sym, funcdata.Offset)
-				}
-			}
-		}
-
-		if off != end {
-			p.errorf("internal error: invalid math in pclntab: off=%#x end=%#x", off, end)
-			break
-		}
-	}
-	if file != nil {
-		file.Close()
-	}
-
-	// Final entry of index is end PC of last function.
-	indexOff = buf.Addr(indexOff, lastSym.SymID, int64(lastSym.Size))
-
-	// Start file table.
-	// Function index is immediately followed by offset to file table.
-	off = (buf.Size() + p.ptrsize - 1) &^ (p.ptrsize - 1)
-	buf.Uint32(indexOff, uint32(off))
-
-	// File table is an array of uint32s.
-	// The first entry gives 1+n, the size of the array.
-	// The following n entries hold offsets to string data.
-	// File number n uses the string pointed at by entry n.
-	// File number 0 is invalid.
-	buf.SetSize(off + (1+len(files))*4)
-	buf.Uint32(off, uint32(1+len(files)))
-	var filestr []string
-	for file := range files {
-		filestr = append(filestr, file)
-	}
-	sort.Strings(filestr)
-	for _, file := range filestr {
-		id := files[file]
-		buf.Uint32(off+4*id, uint32(addString(buf, file)))
-	}
-
-	pclntab := &Sym{
-		Sym: &goobj.Sym{
-			SymID: goobj.SymID{Name: "runtime.pclntab"},
-			Kind:  goobj.SPCLNTAB,
-			Size:  buf.Size(),
-			Reloc: buf.Reloc(),
-		},
-		Bytes: buf.Bytes(),
-	}
-	p.addSym(pclntab)
-}
-
-// addString appends the string s to the buffer b.
-// It returns the offset of the beginning of the string in the buffer.
-func addString(b *SymBuffer, s string) int {
-	off := b.Size()
-	b.SetSize(off + len(s) + 1)
-	copy(b.data[off:], s)
-	return off
-}
-
-// addPCTable appends the PC-data table stored in the file f at the location loc
-// to the symbol buffer b. It returns the offset of the beginning of the table
-// in the buffer.
-func addPCTable(p *Prog, b *SymBuffer, f *os.File, loc goobj.Data) int {
-	if loc.Size == 0 {
-		return 0
-	}
-	off := b.Size()
-	b.SetSize(off + int(loc.Size))
-	_, err := f.ReadAt(b.data[off:off+int(loc.Size)], loc.Offset)
-	if err != nil {
-		p.errorf("%v", err)
-	}
-	return off
-}
-
-// addPCFileTable is like addPCTable, but it renumbers the file names referred to by the table
-// to use the global numbering maintained in the files map. It adds new files to the
-// map as necessary.
-func addPCFileTable(p *Prog, b *SymBuffer, f *os.File, loc goobj.Data, sym *Sym, files map[string]int) int {
-	if loc.Size == 0 {
-		return 0
-	}
-	off := b.Size()
-
-	src := make([]byte, loc.Size)
-	_, err := f.ReadAt(src, loc.Offset)
-	if err != nil {
-		p.errorf("%v", err)
-		return 0
-	}
-
-	filenum := make([]int, len(sym.Func.File))
-	for i, name := range sym.Func.File {
-		num := files[name]
-		if num == 0 {
-			num = len(files) + 1
-			files[name] = num
-		}
-		filenum[i] = num
-	}
-
-	var dst []byte
-	newval := int32(-1)
-	var it PCIter
-	for it.Init(p, src); !it.Done; it.Next() {
-		// value delta
-		oldval := it.Value
-		val := oldval
-		if oldval != -1 {
-			if oldval < 0 || int(oldval) >= len(filenum) {
-				p.errorf("%s: corrupt pc-file table", sym)
-				break
-			}
-			val = int32(filenum[oldval])
-		}
-		dv := val - newval
-		newval = val
-		uv := uint32(dv<<1) ^ uint32(dv>>31)
-		dst = appendVarint(dst, uv)
-
-		// pc delta
-		dst = appendVarint(dst, it.NextPC-it.PC)
-	}
-	if it.Corrupt {
-		p.errorf("%s: corrupt pc-file table", sym)
-	}
-
-	// terminating value delta
-	dst = appendVarint(dst, 0)
-
-	b.SetSize(off + len(dst))
-	copy(b.data[off:], dst)
-	return off
-}
-
-// A SymBuffer is a buffer for preparing the data image of a
-// linker-generated symbol.
-type SymBuffer struct {
-	data    []byte
-	reloc   []goobj.Reloc
-	order   binary.ByteOrder
-	ptrsize int
-}
-
-// Init initializes the buffer for writing.
-func (b *SymBuffer) Init(p *Prog) {
-	b.data = nil
-	b.reloc = nil
-	b.order = p.byteorder
-	b.ptrsize = p.ptrsize
-}
-
-// Bytes returns the buffer data.
-func (b *SymBuffer) Bytes() []byte {
-	return b.data
-}
-
-// SetSize sets the buffer's data size to n bytes.
-func (b *SymBuffer) SetSize(n int) {
-	for cap(b.data) < n {
-		b.data = append(b.data[:cap(b.data)], 0)
-	}
-	b.data = b.data[:n]
-}
-
-// Size returns the buffer's data size.
-func (b *SymBuffer) Size() int {
-	return len(b.data)
-}
-
-// Reloc returns the buffered relocations.
-func (b *SymBuffer) Reloc() []goobj.Reloc {
-	return b.reloc
-}
-
-// Uint8 sets the uint8 at offset off to v.
-// It returns the offset just beyond v.
-func (b *SymBuffer) Uint8(off int, v uint8) int {
-	b.data[off] = v
-	return off + 1
-}
-
-// Uint16 sets the uint16 at offset off to v.
-// It returns the offset just beyond v.
-func (b *SymBuffer) Uint16(off int, v uint16) int {
-	b.order.PutUint16(b.data[off:], v)
-	return off + 2
-}
-
-// Uint32 sets the uint32 at offset off to v.
-// It returns the offset just beyond v.
-func (b *SymBuffer) Uint32(off int, v uint32) int {
-	b.order.PutUint32(b.data[off:], v)
-	return off + 4
-}
-
-// Uint64 sets the uint64 at offset off to v.
-// It returns the offset just beyond v.
-func (b *SymBuffer) Uint64(off int, v uint64) int {
-	b.order.PutUint64(b.data[off:], v)
-	return off + 8
-}
-
-// Uint sets the size-byte unsigned integer at offset off to v.
-// It returns the offset just beyond v.
-func (b *SymBuffer) Uint(off int, v uint64, size int) int {
-	switch size {
-	case 1:
-		return b.Uint8(off, uint8(v))
-	case 2:
-		return b.Uint16(off, uint16(v))
-	case 4:
-		return b.Uint32(off, uint32(v))
-	case 8:
-		return b.Uint64(off, v)
-	}
-	panic("invalid use of SymBuffer.SetUint")
-}
-
-// Addr sets the pointer-sized address at offset off to refer
-// to symoff bytes past the start of sym. It returns the offset
-// just beyond the address.
-func (b *SymBuffer) Addr(off int, sym goobj.SymID, symoff int64) int {
-	b.reloc = append(b.reloc, goobj.Reloc{
-		Offset: off,
-		Size:   b.ptrsize,
-		Sym:    sym,
-		Add:    int(symoff),
-		Type:   obj.R_ADDR,
-	})
-	return off + b.ptrsize
-}
-
-// A PCIter implements iteration over PC-data tables.
-//
-//	var it PCIter
-//	for it.Init(p, data); !it.Done; it.Next() {
-//		it.Value holds from it.PC up to (but not including) it.NextPC
-//	}
-//	if it.Corrupt {
-//		data was malformed
-//	}
-//
-type PCIter struct {
-	PC        uint32
-	NextPC    uint32
-	Value     int32
-	Done      bool
-	Corrupt   bool
-	p         []byte
-	start     bool
-	pcquantum uint32
-}
-
-// Init initializes the iteration.
-// On return, if it.Done is true, the iteration is over.
-// Otherwise it.Value applies in the pc range [it.PC, it.NextPC).
-func (it *PCIter) Init(p *Prog, buf []byte) {
-	it.p = buf
-	it.PC = 0
-	it.NextPC = 0
-	it.Value = -1
-	it.start = true
-	it.pcquantum = uint32(p.pcquantum)
-	it.Done = false
-	it.Next()
-}
-
-// Next steps forward one entry in the table.
-// On return, if it.Done is true, the iteration is over.
-// Otherwise it.Value applies in the pc range [it.PC, it.NextPC).
-func (it *PCIter) Next() {
-	it.PC = it.NextPC
-	if it.Done {
-		return
-	}
-	if len(it.p) == 0 {
-		it.Done = true
-		return
-	}
-
-	// value delta
-	uv, p, ok := decodeVarint(it.p)
-	if !ok {
-		it.Done = true
-		it.Corrupt = true
-		return
-	}
-	it.p = p
-	if uv == 0 && !it.start {
-		it.Done = true
-		return
-	}
-	it.start = false
-	sv := int32(uv>>1) ^ int32(uv<<31)>>31
-	it.Value += sv
-
-	// pc delta
-	uv, it.p, ok = decodeVarint(it.p)
-	if !ok {
-		it.Done = true
-		it.Corrupt = true
-		return
-	}
-	it.NextPC = it.PC + uv*it.pcquantum
-}
-
-// decodeVarint decodes an unsigned varint from p,
-// reporting the value, the remainder of the data, and
-// whether the decoding was successful.
-func decodeVarint(p []byte) (v uint32, rest []byte, ok bool) {
-	for shift := uint(0); ; shift += 7 {
-		if len(p) == 0 {
-			return
-		}
-		c := uint32(p[0])
-		p = p[1:]
-		v |= (c & 0x7F) << shift
-		if c&0x80 == 0 {
-			break
-		}
-	}
-	return v, p, true
-}
-
-// appendVarint appends an unsigned varint encoding of v to p
-// and returns the resulting slice.
-func appendVarint(p []byte, v uint32) []byte {
-	for ; v >= 0x80; v >>= 7 {
-		p = append(p, byte(v)|0x80)
-	}
-	p = append(p, byte(v))
-	return p
-}
diff --git a/src/cmd/newlink/pclntab_test.go b/src/cmd/newlink/pclntab_test.go
deleted file mode 100644
index ea80806..0000000
--- a/src/cmd/newlink/pclntab_test.go
+++ /dev/null
@@ -1,340 +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.
-
-package main
-
-import (
-	"bytes"
-	"cmd/internal/goobj"
-	"fmt"
-	"math/rand"
-	"sort"
-	"strings"
-	"testing"
-)
-
-// Test of pcln table encoding.
-// testdata/genpcln.go generates an assembly file with
-// pseudorandom values for the data that pclntab stores.
-// This test recomputes the same pseudorandom stream
-// and checks that the final linked binary uses those values
-// as well.
-func TestPclntab(t *testing.T) {
-	p := &Prog{
-		GOOS:        "darwin",
-		GOARCH:      "amd64",
-		Error:       func(s string) { t.Error(s) },
-		StartSym:    "start",
-		omitRuntime: true,
-	}
-	var buf bytes.Buffer
-	p.link(&buf, "testdata/pclntab.6")
-	if p.NumError > 0 {
-		return
-	}
-
-	// The algorithm for computing values here must match
-	// the one in testdata/genpcln.go.
-	for f := 0; f < 3; f++ {
-		file := "input"
-		line := 1
-		rnd := rand.New(rand.NewSource(int64(f)))
-		args := rnd.Intn(100) * 8
-		frame := 32 + rnd.Intn(32)/8*8
-		size := 200 + rnd.Intn(100)*8
-
-		name := fmt.Sprintf("func%d", f)
-		r, off, fargs, fframe, ok := findFunc(t, p, name)
-		if !ok {
-			continue // error already printed
-		}
-		if fargs != args {
-			t.Errorf("%s: args=%d, want %d", name, fargs, args)
-		}
-		if fframe != frame+8 {
-			t.Errorf("%s: frame=%d, want %d", name, fframe, frame+8)
-		}
-
-		// Check FUNCDATA 1.
-		fdata, ok := loadFuncdata(t, r, name, off, 1)
-		if ok {
-			fsym := p.Syms[goobj.SymID{Name: fmt.Sprintf("funcdata%d", f)}]
-			if fsym == nil {
-				t.Errorf("funcdata%d is missing in binary", f)
-			} else if fdata != fsym.Addr {
-				t.Errorf("%s: funcdata 1 = %#x, want %#x", name, fdata, fsym.Addr)
-			}
-		}
-
-		// Walk code checking pcdata values.
-		spadj := 0
-		pcdata1 := -1
-		pcdata2 := -1
-
-		checkPCSP(t, r, name, off, 0, 0)
-		checkPCData(t, r, name, off, 0, 0, -1)
-		checkPCData(t, r, name, off, 0, 1, -1)
-		checkPCData(t, r, name, off, 0, 2, -1)
-
-		firstpc := 4
-		for i := 0; i < size; i++ {
-			pc := firstpc + i // skip SP adjustment to allocate frame
-			if i >= 0x100 && t.Failed() {
-				break
-			}
-			// Possible SP adjustment.
-			checkPCSP(t, r, name, off, pc, frame+spadj)
-			if rnd.Intn(100) == 0 {
-				checkPCFileLine(t, r, name, off, pc, file, line)
-				checkPCData(t, r, name, off, pc, 1, pcdata1)
-				checkPCData(t, r, name, off, pc, 2, pcdata2)
-				i += 1
-				pc = firstpc + i
-				checkPCFileLine(t, r, name, off, pc-1, file, line)
-				checkPCData(t, r, name, off, pc-1, 1, pcdata1)
-				checkPCData(t, r, name, off, pc-1, 2, pcdata2)
-				checkPCSP(t, r, name, off, pc-1, frame+spadj)
-
-				if spadj <= -32 || spadj < 32 && rnd.Intn(2) == 0 {
-					spadj += 8
-				} else {
-					spadj -= 8
-				}
-				checkPCSP(t, r, name, off, pc, frame+spadj)
-			}
-
-			// Possible PCFile change.
-			if rnd.Intn(100) == 0 {
-				file = fmt.Sprintf("file%d.s", rnd.Intn(10))
-				line = rnd.Intn(100) + 1
-			}
-
-			// Possible PCLine change.
-			if rnd.Intn(10) == 0 {
-				line = rnd.Intn(1000) + 1
-			}
-
-			// Possible PCData $1 change.
-			if rnd.Intn(100) == 0 {
-				pcdata1 = rnd.Intn(1000)
-			}
-
-			// Possible PCData $2 change.
-			if rnd.Intn(100) == 0 {
-				pcdata2 = rnd.Intn(1000)
-			}
-
-			if i == 0 {
-				checkPCFileLine(t, r, name, off, 0, file, line)
-				checkPCFileLine(t, r, name, off, pc-1, file, line)
-			}
-			checkPCFileLine(t, r, name, off, pc, file, line)
-			checkPCData(t, r, name, off, pc, 1, pcdata1)
-			checkPCData(t, r, name, off, pc, 2, pcdata2)
-		}
-	}
-}
-
-// findFunc finds the function information in the pclntab of p
-// for the function with the given name.
-// It returns a symbol reader for pclntab, the offset of the function information
-// within that symbol, and the args and frame values read out of the information.
-func findFunc(t *testing.T, p *Prog, name string) (r *SymReader, off, args, frame int, ok bool) {
-	tabsym := p.Syms[goobj.SymID{Name: "runtime.pclntab"}]
-	if tabsym == nil {
-		t.Errorf("pclntab is missing in binary")
-		return
-	}
-
-	r = new(SymReader)
-	r.Init(p, tabsym)
-
-	// pclntab must with 8-byte header
-	if r.Uint32(0) != 0xfffffffb || r.Uint8(4) != 0 || r.Uint8(5) != 0 || r.Uint8(6) != uint8(p.pcquantum) || r.Uint8(7) != uint8(p.ptrsize) {
-		t.Errorf("pclntab has incorrect header %.8x", r.data[:8])
-		return
-	}
-
-	sym := p.Syms[goobj.SymID{Name: name}]
-	if sym == nil {
-		t.Errorf("%s is missing in the binary", name)
-		return
-	}
-
-	// index is nfunc addr0 off0 addr1 off1 ... addr_nfunc (sentinel)
-	nfunc := int(r.Addr(8))
-	i := sort.Search(nfunc, func(i int) bool {
-		return r.Addr(8+p.ptrsize*(1+2*i)) >= sym.Addr
-	})
-	if entry := r.Addr(8 + p.ptrsize*(1+2*i)); entry != sym.Addr {
-		indexTab := make([]Addr, 2*nfunc+1)
-		for j := range indexTab {
-			indexTab[j] = r.Addr(8 + p.ptrsize*(1+j))
-		}
-		t.Errorf("pclntab is missing entry for %s (%#x): %#x", name, sym.Addr, indexTab)
-		return
-	}
-
-	off = int(r.Addr(8 + p.ptrsize*(1+2*i+1)))
-
-	// func description at off is
-	//	entry addr
-	//	nameoff uint32
-	//	args uint32
-	//	frame uint32
-	//	pcspoff uint32
-	//	pcfileoff uint32
-	//	pclineoff uint32
-	//	npcdata uint32
-	//	nfuncdata uint32
-	//	pcdata npcdata*uint32
-	//	funcdata nfuncdata*addr
-	//
-	if entry := r.Addr(off); entry != sym.Addr {
-		t.Errorf("pclntab inconsistent: entry for %s addr=%#x has entry=%#x", name, sym.Addr, entry)
-		return
-	}
-	nameoff := int(r.Uint32(off + p.ptrsize))
-	args = int(r.Uint32(off + p.ptrsize + 1*4))
-	frame = int(r.Uint32(off + p.ptrsize + 2*4))
-
-	fname := r.String(nameoff)
-	if fname != name {
-		t.Errorf("pclntab inconsistent: entry for %s addr=%#x has name %q", name, sym.Addr, fname)
-	}
-
-	ok = true // off, args, frame are usable
-	return
-}
-
-// loadFuncdata returns the funcdata #fnum value
-// loaded from the function information for name.
-func loadFuncdata(t *testing.T, r *SymReader, name string, off int, fnum int) (Addr, bool) {
-	npcdata := int(r.Uint32(off + r.p.ptrsize + 6*4))
-	nfuncdata := int(r.Uint32(off + r.p.ptrsize + 7*4))
-	if fnum >= nfuncdata {
-		t.Errorf("pclntab(%s): no funcdata %d (only < %d)", name, fnum, nfuncdata)
-		return 0, false
-	}
-	fdataoff := off + r.p.ptrsize + (8+npcdata)*4 + fnum*r.p.ptrsize
-	fdataoff += fdataoff & 4
-	return r.Addr(fdataoff), true
-}
-
-// checkPCSP checks that the PCSP table in the function information at off
-// lists spadj as the sp delta for pc.
-func checkPCSP(t *testing.T, r *SymReader, name string, off, pc, spadj int) {
-	pcoff := r.Uint32(off + r.p.ptrsize + 3*4)
-	pcval, ok := readPCData(t, r, name, "PCSP", pcoff, pc)
-	if !ok {
-		return
-	}
-	if pcval != spadj {
-		t.Errorf("pclntab(%s): at pc=+%#x, pcsp=%d, want %d", name, pc, pcval, spadj)
-	}
-}
-
-// checkPCSP checks that the PCFile and PCLine tables in the function information at off
-// list file, line as the file name and line number for pc.
-func checkPCFileLine(t *testing.T, r *SymReader, name string, off, pc int, file string, line int) {
-	pcfileoff := r.Uint32(off + r.p.ptrsize + 4*4)
-	pclineoff := r.Uint32(off + r.p.ptrsize + 5*4)
-	pcfilenum, ok1 := readPCData(t, r, name, "PCFile", pcfileoff, pc)
-	pcline, ok2 := readPCData(t, r, name, "PCLine", pclineoff, pc)
-	if !ok1 || !ok2 {
-		return
-	}
-	nfunc := int(r.Addr(8))
-	filetaboff := r.Uint32(8 + r.p.ptrsize*2*(nfunc+1))
-	nfile := int(r.Uint32(int(filetaboff)))
-	if pcfilenum <= 0 || pcfilenum >= nfile {
-		t.Errorf("pclntab(%s): at pc=+%#x, filenum=%d (invalid; nfile=%d)", name, pc, pcfilenum, nfile)
-	}
-	pcfile := r.String(int(r.Uint32(int(filetaboff) + pcfilenum*4)))
-	if !strings.HasSuffix(pcfile, file) {
-		t.Errorf("pclntab(%s): at pc=+%#x, file=%q, want %q", name, pc, pcfile, file)
-	}
-	if pcline != line {
-		t.Errorf("pclntab(%s): at pc=+%#x, line=%d, want %d", name, pc, pcline, line)
-	}
-}
-
-// checkPCData checks that the PCData#pnum table in the function information at off
-// list val as the value for pc.
-func checkPCData(t *testing.T, r *SymReader, name string, off, pc, pnum, val int) {
-	pcoff := r.Uint32(off + r.p.ptrsize + (8+pnum)*4)
-	pcval, ok := readPCData(t, r, name, fmt.Sprintf("PCData#%d", pnum), pcoff, pc)
-	if !ok {
-		return
-	}
-	if pcval != val {
-		t.Errorf("pclntab(%s): at pc=+%#x, pcdata#%d=%d, want %d", name, pc, pnum, pcval, val)
-	}
-}
-
-// readPCData reads the PCData table offset off
-// to obtain and return the value associated with pc.
-func readPCData(t *testing.T, r *SymReader, name, pcdataname string, pcoff uint32, pc int) (int, bool) {
-	// "If pcsp, pcfile, pcln, or any of the pcdata offsets is zero,
-	// that table is considered missing, and all PCs take value -1."
-	if pcoff == 0 {
-		return -1, true
-	}
-
-	var it PCIter
-	for it.Init(r.p, r.data[pcoff:]); !it.Done; it.Next() {
-		if it.PC <= uint32(pc) && uint32(pc) < it.NextPC {
-			return int(it.Value), true
-		}
-	}
-	if it.Corrupt {
-		t.Errorf("pclntab(%s): %s: corrupt pcdata table", name, pcdataname)
-	}
-	return 0, false
-}
-
-// A SymReader provides typed access to the data for a symbol.
-type SymReader struct {
-	p    *Prog
-	data []byte
-}
-
-func (r *SymReader) Init(p *Prog, sym *Sym) {
-	seg := sym.Section.Segment
-	off := sym.Addr - seg.VirtAddr
-	data := seg.Data[off : off+Addr(sym.Size)]
-	r.p = p
-	r.data = data
-}
-
-func (r *SymReader) Uint8(off int) uint8 {
-	return r.data[off]
-}
-
-func (r *SymReader) Uint16(off int) uint16 {
-	return r.p.byteorder.Uint16(r.data[off:])
-}
-
-func (r *SymReader) Uint32(off int) uint32 {
-	return r.p.byteorder.Uint32(r.data[off:])
-}
-
-func (r *SymReader) Uint64(off int) uint64 {
-	return r.p.byteorder.Uint64(r.data[off:])
-}
-
-func (r *SymReader) Addr(off int) Addr {
-	if r.p.ptrsize == 4 {
-		return Addr(r.Uint32(off))
-	}
-	return Addr(r.Uint64(off))
-}
-
-func (r *SymReader) String(off int) string {
-	end := off
-	for r.data[end] != '\x00' {
-		end++
-	}
-	return string(r.data[off:end])
-}
diff --git a/src/cmd/newlink/prog.go b/src/cmd/newlink/prog.go
deleted file mode 100644
index 77fb1ec..0000000
--- a/src/cmd/newlink/prog.go
+++ /dev/null
@@ -1,220 +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.
-
-package main
-
-import (
-	"cmd/internal/goobj"
-	"encoding/binary"
-	"fmt"
-	"go/build"
-	"io"
-	"os"
-	"runtime"
-)
-
-// A Prog holds state for constructing an executable (program) image.
-//
-// The usual sequence of operations on a Prog is:
-//
-//	p.init()
-//	p.scan(file)
-//	p.dead()
-//	p.runtime()
-//	p.layout()
-//	p.load()
-//	p.debug()
-//	p.write(w)
-//
-// p.init is in this file. The rest of the methods are in files
-// named for the method. The convenience method p.link runs
-// this sequence.
-//
-type Prog struct {
-	// Context
-	GOOS     string       // target operating system
-	GOARCH   string       // target architecture
-	Format   string       // desired file format ("elf", "macho", ...)
-	Error    func(string) // called to report an error (if set)
-	NumError int          // number of errors printed
-	StartSym string
-
-	// Derived context
-	arch
-	formatter   formatter
-	startSym    goobj.SymID
-	pkgdir      string
-	omitRuntime bool // do not load runtime package
-
-	// Input
-	Packages   map[string]*Package  // loaded packages, by import path
-	Syms       map[goobj.SymID]*Sym // defined symbols, by symbol ID
-	Missing    map[goobj.SymID]bool // missing symbols
-	Dead       map[goobj.SymID]bool // symbols removed as dead
-	SymOrder   []*Sym               // order syms were scanned
-	MaxVersion int                  // max SymID.Version, for generating fresh symbol IDs
-
-	// Output
-	UnmappedSize Addr       // size of unmapped region at address 0
-	HeaderSize   Addr       // size of object file header
-	Entry        Addr       // virtual address where execution begins
-	Segments     []*Segment // loaded memory segments
-}
-
-// An arch describes architecture-dependent settings.
-type arch struct {
-	byteorder binary.ByteOrder
-	ptrsize   int
-	pcquantum int
-}
-
-// A formatter takes care of the details of generating a particular
-// kind of executable file.
-type formatter interface {
-	// headerSize returns the footprint of the header for p
-	// in both virtual address space and file bytes.
-	// The footprint does not include any bytes stored at the
-	// end of the file.
-	headerSize(p *Prog) (virt, file Addr)
-
-	// write writes the executable file for p to w.
-	write(w io.Writer, p *Prog)
-}
-
-// An Addr represents a virtual memory address, a file address, or a size.
-// It must be a uint64, not a uintptr, so that a 32-bit linker can still generate a 64-bit binary.
-// It must be unsigned in order to link programs placed at very large start addresses.
-// Math involving Addrs must be checked carefully not to require negative numbers.
-type Addr uint64
-
-// A Package is a Go package loaded from a file.
-type Package struct {
-	*goobj.Package        // table of contents
-	File           string // file name for reopening
-	Syms           []*Sym // symbols defined by this package
-}
-
-// A Sym is a symbol defined in a loaded package.
-type Sym struct {
-	*goobj.Sym          // symbol metadata from package file
-	Package    *Package // package defining symbol
-	Section    *Section // section where symbol is placed in output program
-	Addr       Addr     // virtual address of symbol in output program
-	Bytes      []byte   // symbol data, for internally defined symbols
-}
-
-// A Segment is a loaded memory segment.
-// A Prog is expected to have segments named "text" and optionally "data",
-// in that order, before any other segments.
-type Segment struct {
-	Name       string     // name of segment: "text", "data", ...
-	VirtAddr   Addr       // virtual memory address of segment base
-	VirtSize   Addr       // size of segment in memory
-	FileOffset Addr       // file offset of segment base
-	FileSize   Addr       // size of segment in file; can be less than VirtSize
-	Sections   []*Section // sections inside segment
-	Data       []byte     // raw data of segment image
-}
-
-// A Section is part of a loaded memory segment.
-type Section struct {
-	Name     string   // name of section: "text", "rodata", "noptrbss", and so on
-	VirtAddr Addr     // virtual memory address of section base
-	Size     Addr     // size of section in memory
-	Align    Addr     // required alignment
-	InFile   bool     // section has image data in file (like data, unlike bss)
-	Syms     []*Sym   // symbols stored in section
-	Segment  *Segment // segment containing section
-}
-
-func (p *Prog) errorf(format string, args ...interface{}) {
-	if p.Error != nil {
-		p.Error(fmt.Sprintf(format, args...))
-	} else {
-		fmt.Fprintf(os.Stderr, format+"\n", args...)
-	}
-	p.NumError++
-}
-
-// link is the one-stop convenience method for running a link.
-// It writes to w the object file generated from using mainFile as the main package.
-func (p *Prog) link(w io.Writer, mainFile string) {
-	p.init()
-	p.scan(mainFile)
-	if p.NumError > 0 {
-		return
-	}
-	p.dead()
-	p.runtime()
-	p.autoData()
-	p.layout()
-	p.autoConst()
-	if p.NumError > 0 {
-		return
-	}
-	p.load()
-	if p.NumError > 0 {
-		return
-	}
-	p.debug()
-	if p.NumError > 0 {
-		return
-	}
-	p.write(w)
-}
-
-// init initializes p for use by the other methods.
-func (p *Prog) init() {
-	// Set default context if not overridden.
-	if p.GOOS == "" {
-		p.GOOS = build.Default.GOOS
-	}
-	if p.GOARCH == "" {
-		p.GOARCH = build.Default.GOARCH
-	}
-	if p.Format == "" {
-		p.Format = goosFormat[p.GOOS]
-		if p.Format == "" {
-			p.errorf("no default file format for GOOS %q", p.GOOS)
-			return
-		}
-	}
-	if p.StartSym == "" {
-		p.StartSym = fmt.Sprintf("_rt0_%s_%s", p.GOARCH, p.GOOS)
-	}
-
-	// Derive internal context.
-	p.formatter = formatters[p.Format]
-	if p.formatter == nil {
-		p.errorf("unknown output file format %q", p.Format)
-		return
-	}
-	p.startSym = goobj.SymID{Name: p.StartSym}
-	arch, ok := arches[p.GOARCH]
-	if !ok {
-		p.errorf("unknown GOOS %q", p.GOOS)
-		return
-	}
-	p.arch = arch
-
-	p.pkgdir = fmt.Sprintf("%s/pkg/%s_%s", runtime.GOROOT(), p.GOOS, p.GOARCH)
-}
-
-// goosFormat records the default format for each known GOOS value.
-var goosFormat = map[string]string{
-	"darwin": "darwin",
-}
-
-// formatters records the format implementation for each known format value.
-var formatters = map[string]formatter{
-	"darwin": machoFormat{},
-}
-
-var arches = map[string]arch{
-	"amd64": {
-		byteorder: binary.LittleEndian,
-		ptrsize:   8,
-		pcquantum: 1,
-	},
-}
diff --git a/src/cmd/newlink/prog_test.go b/src/cmd/newlink/prog_test.go
deleted file mode 100644
index 0853506..0000000
--- a/src/cmd/newlink/prog_test.go
+++ /dev/null
@@ -1,163 +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.
-
-package main
-
-import (
-	"bytes"
-	"fmt"
-	"io/ioutil"
-	"testing"
-)
-
-// shiftProg adjusts the addresses in p.
-// It adds vdelta to all virtual addresses and fdelta to all file offsets.
-func shiftProg(p *Prog, vdelta Addr, fdelta Addr) {
-	p.Entry += vdelta
-	for _, seg := range p.Segments {
-		seg.FileOffset += fdelta
-		seg.VirtAddr += vdelta
-		for _, sect := range seg.Sections {
-			sect.VirtAddr += vdelta
-			for _, sym := range sect.Syms {
-				sym.Addr += vdelta
-			}
-		}
-	}
-}
-
-// diffProg returns a list of differences between p and q,
-// assuming p is being checked and q is the correct answer.
-func diffProg(p, q *Prog) []string {
-	var errors []string
-	if p.UnmappedSize != q.UnmappedSize {
-		errors = append(errors, fmt.Sprintf("p.UnmappedSize = %#x, want %#x", p.UnmappedSize, q.UnmappedSize))
-	}
-	if p.HeaderSize != q.HeaderSize {
-		errors = append(errors, fmt.Sprintf("p.HeaderSize = %#x, want %#x", p.HeaderSize, q.HeaderSize))
-	}
-	if p.Entry != q.Entry {
-		errors = append(errors, fmt.Sprintf("p.Entry = %#x, want %#x", p.Entry, q.Entry))
-	}
-	for i := 0; i < len(p.Segments) || i < len(q.Segments); i++ {
-		if i >= len(p.Segments) {
-			errors = append(errors, fmt.Sprintf("p missing segment %q", q.Segments[i].Name))
-			continue
-		}
-		if i >= len(q.Segments) {
-			errors = append(errors, fmt.Sprintf("p has extra segment %q", p.Segments[i].Name))
-			continue
-		}
-		pseg := p.Segments[i]
-		qseg := q.Segments[i]
-		if pseg.Name != qseg.Name {
-			errors = append(errors, fmt.Sprintf("segment %d Name = %q, want %q", i, pseg.Name, qseg.Name))
-			continue // probably out of sync
-		}
-		if pseg.VirtAddr != qseg.VirtAddr {
-			errors = append(errors, fmt.Sprintf("segment %q VirtAddr = %#x, want %#x", pseg.Name, pseg.VirtAddr, qseg.VirtAddr))
-		}
-		if pseg.VirtSize != qseg.VirtSize {
-			errors = append(errors, fmt.Sprintf("segment %q VirtSize = %#x, want %#x", pseg.Name, pseg.VirtSize, qseg.VirtSize))
-		}
-		if pseg.FileOffset != qseg.FileOffset {
-			errors = append(errors, fmt.Sprintf("segment %q FileOffset = %#x, want %#x", pseg.Name, pseg.FileOffset, qseg.FileOffset))
-		}
-		if pseg.FileSize != qseg.FileSize {
-			errors = append(errors, fmt.Sprintf("segment %q FileSize = %#x, want %#x", pseg.Name, pseg.FileSize, qseg.FileSize))
-		}
-		if len(pseg.Data) != len(qseg.Data) {
-			errors = append(errors, fmt.Sprintf("segment %q len(Data) = %d, want %d", pseg.Name, len(pseg.Data), len(qseg.Data)))
-		} else if !bytes.Equal(pseg.Data, qseg.Data) {
-			errors = append(errors, fmt.Sprintf("segment %q Data mismatch:\n\thave %x\n\twant %x", pseg.Name, pseg.Data, qseg.Data))
-		}
-
-		for j := 0; j < len(pseg.Sections) || j < len(qseg.Sections); j++ {
-			if j >= len(pseg.Sections) {
-				errors = append(errors, fmt.Sprintf("segment %q missing section %q", pseg.Name, qseg.Sections[i].Name))
-				continue
-			}
-			if j >= len(qseg.Sections) {
-				errors = append(errors, fmt.Sprintf("segment %q has extra section %q", pseg.Name, pseg.Sections[i].Name))
-				continue
-			}
-			psect := pseg.Sections[j]
-			qsect := qseg.Sections[j]
-			if psect.Name != qsect.Name {
-				errors = append(errors, fmt.Sprintf("segment %q, section %d Name = %q, want %q", pseg.Name, j, psect.Name, qsect.Name))
-				continue // probably out of sync
-			}
-
-			if psect.VirtAddr != qsect.VirtAddr {
-				errors = append(errors, fmt.Sprintf("segment %q section %q VirtAddr = %#x, want %#x", pseg.Name, psect.Name, psect.VirtAddr, qsect.VirtAddr))
-			}
-			if psect.Size != qsect.Size {
-				errors = append(errors, fmt.Sprintf("segment %q section %q Size = %#x, want %#x", pseg.Name, psect.Name, psect.Size, qsect.Size))
-			}
-			if psect.Align != qsect.Align {
-				errors = append(errors, fmt.Sprintf("segment %q section %q Align = %#x, want %#x", pseg.Name, psect.Name, psect.Align, qsect.Align))
-			}
-		}
-	}
-
-	return errors
-}
-
-// cloneProg returns a deep copy of p.
-func cloneProg(p *Prog) *Prog {
-	q := new(Prog)
-	*q = *p
-	q.Segments = make([]*Segment, len(p.Segments))
-	for i, seg := range p.Segments {
-		q.Segments[i] = cloneSegment(seg)
-	}
-	return q
-}
-
-// cloneSegment returns a deep copy of seg.
-func cloneSegment(seg *Segment) *Segment {
-	t := new(Segment)
-	*t = *seg
-	t.Sections = make([]*Section, len(seg.Sections))
-	for i, sect := range seg.Sections {
-		t.Sections[i] = cloneSection(sect)
-	}
-	t.Data = make([]byte, len(seg.Data))
-	copy(t.Data, seg.Data)
-	return t
-}
-
-// cloneSection returns a deep copy of section.
-func cloneSection(sect *Section) *Section {
-	// At the moment, there's nothing we need to make a deep copy of.
-	t := new(Section)
-	*t = *sect
-	return t
-}
-
-const saveMismatch = true
-
-// checkGolden checks that data matches the named file.
-// If not, it reports the error to the test.
-func checkGolden(t *testing.T, data []byte, name string) {
-	golden := mustParseHexdumpFile(t, name)
-	if !bytes.Equal(data, golden) {
-		if saveMismatch {
-			ioutil.WriteFile(name+".raw", data, 0666)
-			ioutil.WriteFile(name+".hex", []byte(hexdump(data)), 0666)
-		}
-		// TODO(rsc): A better diff would be nice, as needed.
-		i := 0
-		for i < len(data) && i < len(golden) && data[i] == golden[i] {
-			i++
-		}
-		if i >= len(data) {
-			t.Errorf("%s: output file shorter than expected: have %d bytes, want %d", name, len(data), len(golden))
-		} else if i >= len(golden) {
-			t.Errorf("%s: output file larger than expected: have %d bytes, want %d", name, len(data), len(golden))
-		} else {
-			t.Errorf("%s: output file differs at byte %d: have %#02x, want %#02x", name, i, data[i], golden[i])
-		}
-	}
-}
diff --git a/src/cmd/newlink/runtime.go b/src/cmd/newlink/runtime.go
deleted file mode 100644
index acda2d2..0000000
--- a/src/cmd/newlink/runtime.go
+++ /dev/null
@@ -1,28 +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.
-
-// Generation of runtime-accessible data structures.
-// See also debug.go.
-
-package main
-
-import "cmd/internal/goobj"
-
-func (p *Prog) runtime() {
-	p.pclntab()
-
-	// TODO: Implement garbage collection data.
-	p.addSym(&Sym{
-		Sym: &goobj.Sym{
-			SymID: goobj.SymID{Name: "runtime.gcdata"},
-			Kind:  goobj.SRODATA,
-		},
-	})
-	p.addSym(&Sym{
-		Sym: &goobj.Sym{
-			SymID: goobj.SymID{Name: "runtime.gcbss"},
-			Kind:  goobj.SRODATA,
-		},
-	})
-}
diff --git a/src/cmd/newlink/scan.go b/src/cmd/newlink/scan.go
deleted file mode 100644
index 7feb0d8..0000000
--- a/src/cmd/newlink/scan.go
+++ /dev/null
@@ -1,187 +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.
-
-// Initial scan of packages making up a program.
-
-// TODO(rsc): Rename goobj.SymID.Version to StaticID to avoid confusion with the ELF meaning of version.
-// TODO(rsc): Fix file format so that SBSS/SNOPTRBSS with data is listed as SDATA/SNOPTRDATA.
-// TODO(rsc): Parallelize scan to overlap file i/o where possible.
-
-package main
-
-import (
-	"cmd/internal/goobj"
-	"os"
-	"sort"
-	"strings"
-)
-
-// scan scans all packages making up the program, starting with package main defined in mainfile.
-func (p *Prog) scan(mainfile string) {
-	p.initScan()
-	p.scanFile("main", mainfile)
-	if len(p.Missing) > 0 && !p.omitRuntime {
-		p.scanImport("runtime")
-	}
-
-	var missing []string
-	for sym := range p.Missing {
-		if !p.isAuto(sym) {
-			missing = append(missing, sym.String())
-		}
-	}
-
-	if missing != nil {
-		sort.Strings(missing)
-		for _, sym := range missing {
-			p.errorf("undefined: %s", sym)
-		}
-	}
-
-	// TODO(rsc): Walk import graph to diagnose cycles.
-}
-
-// initScan initializes the Prog fields needed by scan.
-func (p *Prog) initScan() {
-	p.Packages = make(map[string]*Package)
-	p.Syms = make(map[goobj.SymID]*Sym)
-	p.Missing = make(map[goobj.SymID]bool)
-	p.Missing[p.startSym] = true
-}
-
-// scanFile reads file to learn about the package with the given import path.
-func (p *Prog) scanFile(pkgpath string, file string) {
-	pkg := &Package{
-		File: file,
-	}
-	p.Packages[pkgpath] = pkg
-
-	f, err := os.Open(file)
-	if err != nil {
-		p.errorf("%v", err)
-		return
-	}
-	gp, err := goobj.Parse(f, pkgpath)
-	f.Close()
-	if err != nil {
-		p.errorf("reading %s: %v", file, err)
-		return
-	}
-
-	// TODO(rsc): Change cmd/internal/goobj to record package name as gp.Name.
-	// TODO(rsc): If pkgpath == "main", check that gp.Name == "main".
-
-	pkg.Package = gp
-
-	for _, gs := range gp.Syms {
-		// TODO(rsc): Fix file format instead of this workaround.
-		if gs.Data.Size > 0 {
-			switch gs.Kind {
-			case goobj.SBSS:
-				gs.Kind = goobj.SDATA
-			case goobj.SNOPTRBSS:
-				gs.Kind = goobj.SNOPTRDATA
-			}
-		}
-
-		if gs.Version != 0 {
-			gs.Version += p.MaxVersion
-		}
-		for i := range gs.Reloc {
-			r := &gs.Reloc[i]
-			if r.Sym.Version != 0 {
-				r.Sym.Version += p.MaxVersion
-			}
-			if p.Syms[r.Sym] == nil {
-				p.Missing[r.Sym] = true
-			}
-		}
-		if gs.Func != nil {
-			for i := range gs.Func.FuncData {
-				fdata := &gs.Func.FuncData[i]
-				if fdata.Sym.Name != "" {
-					if fdata.Sym.Version != 0 {
-						fdata.Sym.Version += p.MaxVersion
-					}
-					if p.Syms[fdata.Sym] == nil {
-						p.Missing[fdata.Sym] = true
-					}
-				}
-			}
-		}
-		if old := p.Syms[gs.SymID]; old != nil {
-			// Duplicate definition of symbol. Is it okay?
-			// TODO(rsc): Write test for this code.
-			switch {
-			// If both symbols are BSS (no data), take max of sizes
-			// but otherwise ignore second symbol.
-			case old.Data.Size == 0 && gs.Data.Size == 0:
-				if old.Size < gs.Size {
-					old.Size = gs.Size
-				}
-				continue
-
-			// If one is in BSS and one is not, use the one that is not.
-			case old.Data.Size > 0 && gs.Data.Size == 0:
-				continue
-			case gs.Data.Size > 0 && old.Data.Size == 0:
-				break // install gs as new symbol below
-
-			// If either is marked as DupOK, we can keep either one.
-			// Keep the one that we saw first.
-			case old.DupOK || gs.DupOK:
-				continue
-
-			// Otherwise, there's an actual conflict:
-			default:
-				p.errorf("symbol %s defined in both %s and %s %v %v", gs.SymID, old.Package.File, file, old.Data, gs.Data)
-				continue
-			}
-		}
-		s := &Sym{
-			Sym:     gs,
-			Package: pkg,
-		}
-		p.addSym(s)
-		delete(p.Missing, gs.SymID)
-
-		if s.Data.Size > int64(s.Size) {
-			p.errorf("%s: initialized data larger than symbol (%d > %d)", s, s.Data.Size, s.Size)
-		}
-	}
-	p.MaxVersion += pkg.MaxVersion
-
-	for i, pkgpath := range pkg.Imports {
-		// TODO(rsc): Fix file format to drop .a from recorded import path.
-		pkgpath = strings.TrimSuffix(pkgpath, ".a")
-		pkg.Imports[i] = pkgpath
-
-		p.scanImport(pkgpath)
-	}
-}
-
-func (p *Prog) addSym(s *Sym) {
-	pkg := s.Package
-	if pkg == nil {
-		pkg = p.Packages[""]
-		if pkg == nil {
-			pkg = &Package{}
-			p.Packages[""] = pkg
-		}
-		s.Package = pkg
-	}
-	pkg.Syms = append(pkg.Syms, s)
-	p.Syms[s.SymID] = s
-	p.SymOrder = append(p.SymOrder, s)
-}
-
-// scanImport finds the object file for the given import path and then scans it.
-func (p *Prog) scanImport(pkgpath string) {
-	if p.Packages[pkgpath] != nil {
-		return // already loaded
-	}
-
-	// TODO(rsc): Implement correct search to find file.
-	p.scanFile(pkgpath, p.pkgdir+"/"+pkgpath+".a")
-}
diff --git a/src/cmd/newlink/testdata/Makefile b/src/cmd/newlink/testdata/Makefile
deleted file mode 100644
index d5df474..0000000
--- a/src/cmd/newlink/testdata/Makefile
+++ /dev/null
@@ -1,15 +0,0 @@
-ALL=\
-	autosection.6\
-	autoweak.6\
-	dead.6\
-	hello.6\
-	layout.6\
-	pclntab.6\
-
-all: $(ALL)
-
-%.6: %.s
-	GOARCH=amd64 GOOS=darwin go tool asm -o $*.6 -I $(shell go env GOROOT)/pkg/include -trimpath=$(shell pwd) $*.s
-
-pclntab.s: genpcln.go
-	go run genpcln.go >pclntab.s
diff --git a/src/cmd/newlink/testdata/autosection.6 b/src/cmd/newlink/testdata/autosection.6
deleted file mode 100644
index 702cab6..0000000
Binary files a/src/cmd/newlink/testdata/autosection.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/autosection.s b/src/cmd/newlink/testdata/autosection.s
deleted file mode 100644
index e0cb217..0000000
--- a/src/cmd/newlink/testdata/autosection.s
+++ /dev/null
@@ -1,60 +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.
-
-// Test of section-named symbols.
-
-#include "textflag.h"
-
-TEXT start(SB),7,$0
-	MOVQ $autotab(SB),AX
-	MOVQ $autoptr(SB),AX
-	RET
-
-GLOBL zero(SB), $8
-
-GLOBL zeronoptr(SB), NOPTR, $16
-
-// text
-DATA autotab+0x00(SB)/8, $runtime·text(SB)
-DATA autotab+0x08(SB)/8, $start(SB)
-DATA autotab+0x10(SB)/8, $runtime·etext(SB)
-DATA autotab+0x18(SB)/8, $start+16(SB)
-
-// data
-DATA autotab+0x20(SB)/8, $runtime·data(SB)
-DATA autotab+0x28(SB)/8, $autotab(SB)
-DATA autotab+0x30(SB)/8, $runtime·edata(SB)
-DATA autotab+0x38(SB)/8, $nonzero+4(SB)
-
-// bss
-DATA autotab+0x40(SB)/8, $runtime·bss(SB)
-DATA autotab+0x48(SB)/8, $zero(SB)
-DATA autotab+0x50(SB)/8, $runtime·ebss(SB)
-DATA autotab+0x58(SB)/8, $zero+8(SB)
-
-// noptrdata
-DATA autotab+0x60(SB)/8, $runtime·noptrdata(SB)
-DATA autotab+0x68(SB)/8, $nonzeronoptr(SB)
-DATA autotab+0x70(SB)/8, $runtime·enoptrdata(SB)
-DATA autotab+0x78(SB)/8, $nonzeronoptr+8(SB)
-
-// noptrbss
-DATA autotab+0x80(SB)/8, $runtime·noptrbss(SB)
-DATA autotab+0x88(SB)/8, $zeronoptr(SB)
-DATA autotab+0x90(SB)/8, $runtime·enoptrbss(SB)
-DATA autotab+0x98(SB)/8, $zeronoptr+16(SB)
-
-// end
-DATA autotab+0xa0(SB)/8, $runtime·end(SB)
-DATA autotab+0xa8(SB)/8, $zeronoptr+16(SB)
-
-GLOBL autotab(SB), $0xb0
-
-DATA nonzero(SB)/4, $1
-GLOBL nonzero(SB), $4
-
-DATA nonzeronoptr(SB)/8, $2
-GLOBL nonzeronoptr(SB), NOPTR, $8
-
-GLOBL autoptr(SB), $0
diff --git a/src/cmd/newlink/testdata/autoweak.6 b/src/cmd/newlink/testdata/autoweak.6
deleted file mode 100644
index 5c68cdb..0000000
Binary files a/src/cmd/newlink/testdata/autoweak.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/autoweak.s b/src/cmd/newlink/testdata/autoweak.s
deleted file mode 100644
index 2d11330..0000000
--- a/src/cmd/newlink/testdata/autoweak.s
+++ /dev/null
@@ -1,30 +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.
-
-// Test of go.weak symbols.
-
-TEXT start(SB),7,$0
-	MOVQ $autotab(SB),AX
-	MOVQ $autoptr(SB),AX
-	RET
-
-// go.weak.sym should resolve to sym, because sym is in the binary.
-DATA autotab+0(SB)/8, $go·weak·sym(SB)
-DATA autotab+8(SB)/8, $sym(SB)
-
-// go.weak.missingsym should resolve to 0, because missingsym is not in the binary.
-DATA autotab+16(SB)/8, $go·weak·missingsym(SB)
-DATA autotab+24(SB)/8, $0
-
-// go.weak.deadsym should resolve to 0, because deadsym is discarded during dead code removal
-DATA autotab+32(SB)/8, $go·weak·deadsym(SB)
-DATA autotab+40(SB)/8, $0
-
-GLOBL autotab(SB), $48
-
-GLOBL sym(SB), $1
-
-GLOBL deadsym(SB), $1
-
-GLOBL autoptr(SB), $0
diff --git a/src/cmd/newlink/testdata/dead.6 b/src/cmd/newlink/testdata/dead.6
deleted file mode 100644
index 6f14aa2..0000000
Binary files a/src/cmd/newlink/testdata/dead.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/dead.s b/src/cmd/newlink/testdata/dead.s
deleted file mode 100644
index 86f3136..0000000
--- a/src/cmd/newlink/testdata/dead.s
+++ /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.
-
-// Test of dead code removal.
-// Symbols with names beginning with dead_ should be discarded.
-// Others should be kept.
-
-TEXT start(SB),7,$0	// start symbol
-	MOVQ $data1<>(SB), AX
-	CALL text1(SB)
-	MOVQ $text2(SB), BX
-	RET
-
-TEXT text1(SB),7,$0
-	FUNCDATA $1, funcdata+4(SB)
-	RET
-
-TEXT text2(SB),7,$0
-	MOVQ $runtime·edata(SB),BX
-	RET
-
-DATA data1<>+0(SB)/8, $data2(SB)
-DATA data1<>+8(SB)/8, $data3(SB)
-GLOBL data1<>(SB), $16
-GLOBL data2(SB), $1
-GLOBL data3(SB), $1
-GLOBL funcdata(SB), $8
-
-TEXT dead_start(SB),7,$0
-	MOVQ $dead_data1(SB), AX
-	CALL dead_text1(SB)
-	MOVQ $dead_text2(SB), BX
-	RET
-
-TEXT dead_text1(SB),7,$0
-	FUNCDATA $1, dead_funcdata+4(SB)
-	RET
-
-TEXT dead_text2(SB),7,$0
-	RET
-
-DATA dead_data1+0(SB)/8, $dead_data2(SB)
-DATA dead_data1+8(SB)/8, $dead_data3(SB)
-GLOBL dead_data1(SB), $16
-GLOBL dead_data2(SB), $1
-GLOBL dead_data3(SB), $1
-GLOBL dead_funcdata(SB), $8
diff --git a/src/cmd/newlink/testdata/genpcln.go b/src/cmd/newlink/testdata/genpcln.go
deleted file mode 100644
index c10eaea..0000000
--- a/src/cmd/newlink/testdata/genpcln.go
+++ /dev/null
@@ -1,112 +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.
-
-// This program generates a .s file using a pseudorandom
-// value stream for the runtime function data.
-// The pclntab test checks that the linked copy
-// still has the same pseudorandom value stream.
-
-package main
-
-import (
-	"fmt"
-	"math/rand"
-)
-
-func main() {
-	fmt.Printf("// generated by genpcln.go; do not edit\n\n")
-	for f := 0; f < 3; f++ {
-		r := rand.New(rand.NewSource(int64(f)))
-		file := "input"
-		line := 1
-		args := r.Intn(100) * 8
-		frame := 32 + r.Intn(32)/8*8
-		fmt.Printf("#line %d %q\n", line, file)
-		fmt.Printf("TEXT func%d(SB),7,$%d-%d\n", f, frame, args)
-		fmt.Printf("\tFUNCDATA $1, funcdata%d(SB)\n", f)
-		fmt.Printf("#line %d %q\n", line, file)
-		size := 200 + r.Intn(100)*8
-		spadj := 0
-		flushed := 0
-		firstpc := 4
-		flush := func(i int) {
-			for i-flushed >= 10 {
-				fmt.Printf("#line %d %q\n", line, file)
-				fmt.Printf("/*%#04x*/\tMOVQ $0x123456789, AX\n", firstpc+flushed)
-				flushed += 10
-			}
-			for i-flushed >= 5 {
-				fmt.Printf("#line %d %q\n", line, file)
-				fmt.Printf("/*%#04x*/\tMOVL $0x1234567, AX\n", firstpc+flushed)
-				flushed += 5
-			}
-			for i-flushed > 0 {
-				fmt.Printf("#line %d %q\n", line, file)
-				fmt.Printf("/*%#04x*/\tBYTE $0\n", firstpc+flushed)
-				flushed++
-			}
-		}
-		for i := 0; i < size; i++ {
-			// Possible SP adjustment.
-			if r.Intn(100) == 0 {
-				flush(i)
-				fmt.Printf("#line %d %q\n", line, file)
-				if spadj <= -32 || spadj < 32 && r.Intn(2) == 0 {
-					spadj += 8
-					fmt.Printf("/*%#04x*/\tPUSHQ AX\n", firstpc+i)
-				} else {
-					spadj -= 8
-					fmt.Printf("/*%#04x*/\tPOPQ AX\n", firstpc+i)
-				}
-				i += 1
-				flushed = i
-			}
-
-			// Possible PCFile change.
-			if r.Intn(100) == 0 {
-				flush(i)
-				file = fmt.Sprintf("file%d.s", r.Intn(10))
-				line = r.Intn(100) + 1
-			}
-
-			// Possible PCLine change.
-			if r.Intn(10) == 0 {
-				flush(i)
-				line = r.Intn(1000) + 1
-			}
-
-			// Possible PCData $1 change.
-			if r.Intn(100) == 0 {
-				flush(i)
-				fmt.Printf("/*%6s*/\tPCDATA $1, $%d\n", "", r.Intn(1000))
-			}
-
-			// Possible PCData $2 change.
-			if r.Intn(100) == 0 {
-				flush(i)
-				fmt.Printf("/*%6s*/\tPCDATA $2, $%d\n", "", r.Intn(1000))
-			}
-		}
-		flush(size)
-		for spadj < 0 {
-			fmt.Printf("\tPUSHQ AX\n")
-			spadj += 8
-		}
-		for spadj > 0 {
-			fmt.Printf("\tPOPQ AX\n")
-			spadj -= 8
-		}
-		fmt.Printf("\tRET\n")
-
-		fmt.Printf("\n")
-		fmt.Printf("GLOBL funcdata%d(SB), $16\n", f)
-	}
-
-	fmt.Printf("\nTEXT start(SB),7,$0\n")
-	for f := 0; f < 3; f++ {
-		fmt.Printf("\tCALL func%d(SB)\n", f)
-	}
-	fmt.Printf("\tMOVQ $runtime·pclntab(SB), AX\n")
-	fmt.Printf("\n\tRET\n")
-}
diff --git a/src/cmd/newlink/testdata/hello.6 b/src/cmd/newlink/testdata/hello.6
deleted file mode 100644
index 825a2a6..0000000
Binary files a/src/cmd/newlink/testdata/hello.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/hello.s b/src/cmd/newlink/testdata/hello.s
deleted file mode 100644
index 32ed675..0000000
--- a/src/cmd/newlink/testdata/hello.s
+++ /dev/null
@@ -1,15 +0,0 @@
-TEXT _rt0_go(SB),7,$0
-	MOVL $1, DI
-	MOVL $hello<>(SB), SI
-	MOVL $12, DX
-	MOVL $0x2000004, AX
-	SYSCALL
-	MOVL $0, DI
-	MOVL $0x2000001, AX
-	SYSCALL
-	RET
-
-DATA hello<>+0(SB)/4, $"hell"
-DATA hello<>+4(SB)/4, $"o wo"
-DATA hello<>+8(SB)/4, $"rld\n"
-GLOBL hello<>(SB), $12
diff --git a/src/cmd/newlink/testdata/layout.6 b/src/cmd/newlink/testdata/layout.6
deleted file mode 100644
index 7e2a22b..0000000
Binary files a/src/cmd/newlink/testdata/layout.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/layout.s b/src/cmd/newlink/testdata/layout.s
deleted file mode 100644
index c3e55ef..0000000
--- a/src/cmd/newlink/testdata/layout.s
+++ /dev/null
@@ -1,29 +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.
-
-// Test of section assignment in layout.go.
-// Each symbol should end up in the section named by the symbol name prefix (up to the underscore).
-
-#include "textflag.h"
-
-TEXT text_start(SB),7,$0
-	MOVQ $rodata_sym(SB), AX
-	MOVQ $noptrdata_sym(SB), AX
-	MOVQ $data_sym(SB), AX
-	MOVQ $bss_sym(SB), AX
-	MOVQ $noptrbss_sym(SB), AX
-	RET
-
-DATA rodata_sym(SB)/4, $1
-GLOBL rodata_sym(SB), RODATA, $4
-
-DATA noptrdata_sym(SB)/4, $1
-GLOBL noptrdata_sym(SB), NOPTR, $4
-
-DATA data_sym(SB)/4, $1
-GLOBL data_sym(SB), $4
-
-GLOBL bss_sym(SB), $4
-
-GLOBL noptrbss_sym(SB), NOPTR, $4
diff --git a/src/cmd/newlink/testdata/link.hello.darwin.amd64 b/src/cmd/newlink/testdata/link.hello.darwin.amd64
deleted file mode 100644
index 4c62eb1..0000000
--- a/src/cmd/newlink/testdata/link.hello.darwin.amd64
+++ /dev/null
@@ -1,55 +0,0 @@
-00000000  cf fa ed fe 07 00 00 01  03 00 00 00 02 00 00 00  |................|
-00000010  04 00 00 00 d0 02 00 00  01 00 00 00 00 00 00 00  |................|
-00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|
-00000030  52 4f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |RO..............|
-00000040  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000060  00 00 00 00 00 00 00 00  19 00 00 00 38 01 00 00  |............8...|
-00000070  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000080  00 10 00 00 00 00 00 00  c0 10 00 00 00 00 00 00  |................|
-00000090  00 00 00 00 00 00 00 00  c0 10 00 00 00 00 00 00  |................|
-000000a0  07 00 00 00 05 00 00 00  03 00 00 00 00 00 00 00  |................|
-000000b0  5f 5f 74 65 78 74 00 00  00 00 00 00 00 00 00 00  |__text..........|
-000000c0  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-000000d0  00 20 00 00 00 00 00 00  30 00 00 00 00 00 00 00  |. ......0.......|
-000000e0  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-000000f0  00 04 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000100  5f 5f 72 6f 64 61 74 61  00 00 00 00 00 00 00 00  |__rodata........|
-00000110  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000120  30 20 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |0 ..............|
-00000130  30 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |0...............|
-*
-00000150  5f 5f 66 75 6e 63 74 61  62 00 00 00 00 00 00 00  |__functab.......|
-00000160  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000170  30 20 00 00 00 00 00 00  90 00 00 00 00 00 00 00  |0 ..............|
-00000180  30 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |0...............|
-*
-000001a0  19 00 00 00 98 00 00 00  5f 5f 44 41 54 41 00 00  |........__DATA..|
-000001b0  00 00 00 00 00 00 00 00  00 30 00 00 00 00 00 00  |.........0......|
-000001c0  0c 00 00 00 00 00 00 00  00 20 00 00 00 00 00 00  |......... ......|
-000001d0  0c 00 00 00 00 00 00 00  03 00 00 00 03 00 00 00  |................|
-000001e0  01 00 00 00 00 00 00 00  5f 5f 64 61 74 61 00 00  |........__data..|
-000001f0  00 00 00 00 00 00 00 00  5f 5f 44 41 54 41 00 00  |........__DATA..|
-00000200  00 00 00 00 00 00 00 00  00 30 00 00 00 00 00 00  |.........0......|
-00000210  0c 00 00 00 00 00 00 00  00 20 00 00 00 00 00 00  |......... ......|
-*
-00000230  00 00 00 00 00 00 00 00  05 00 00 00 b8 00 00 00  |................|
-00000240  04 00 00 00 2a 00 00 00  00 00 00 00 00 00 00 00  |....*...........|
-*
-000002c0  00 00 00 00 00 00 00 00  00 20 00 00 00 00 00 00  |......... ......|
-*
-00001000  bf 01 00 00 00 8d 35 f5  0f 00 00 ba 0c 00 00 00  |......5.........|
-00001010  b8 04 00 00 02 0f 05 31  ff b8 01 00 00 02 0f 05  |.......1........|
-00001020  c3 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00001030  fb ff ff ff 00 00 01 08  01 00 00 00 00 00 00 00  |................|
-00001040  00 20 00 00 00 00 00 00  30 00 00 00 00 00 00 00  |. ......0.......|
-00001050  30 20 00 00 00 00 00 00  80 00 00 00 00 00 00 00  |0 ..............|
-00001060  00 20 00 00 00 00 00 00  58 00 00 00 00 00 00 80  |. ......X.......|
-00001070  08 00 00 00 60 00 00 00  63 00 00 00 66 00 00 00  |....`...c...f...|
-00001080  00 00 00 00 00 00 00 00  5f 72 74 30 5f 67 6f 00  |........_rt0_go.|
-00001090  02 30 00 04 30 00 06 05  02 06 02 05 02 05 02 02  |.0..0...........|
-000010a0  02 02 02 05 02 02 02 10  00 00 00 00 00 00 00 00  |................|
-000010b0  02 00 00 00 88 00 00 00  68 65 6c 6c 6f 2e 73 00  |........hello.s.|
-*
-00002000  68 65 6c 6c 6f 20 77 6f  72 6c 64 0a              |hello world.|
-0000200c
diff --git a/src/cmd/newlink/testdata/macho.amd64.exit9 b/src/cmd/newlink/testdata/macho.amd64.exit9
deleted file mode 100644
index 1adc814..0000000
--- a/src/cmd/newlink/testdata/macho.amd64.exit9
+++ /dev/null
@@ -1,24 +0,0 @@
-00000000  cf fa ed fe 07 00 00 01  03 00 00 00 02 00 00 00  |................|
-00000010  03 00 00 00 98 01 00 00  01 00 00 00 00 00 00 00  |................|
-00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|
-00000030  52 4f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |RO..............|
-00000040  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  00 00 00 00 00 00 00 00  19 00 00 00 98 00 00 00  |................|
-00000070  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000080  00 10 00 00 00 00 00 00  0d 10 00 00 00 00 00 00  |................|
-00000090  00 00 00 00 00 00 00 00  0d 10 00 00 00 00 00 00  |................|
-000000a0  07 00 00 00 05 00 00 00  01 00 00 00 00 00 00 00  |................|
-000000b0  5f 5f 74 65 78 74 00 00  00 00 00 00 00 00 00 00  |__text..........|
-000000c0  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-000000d0  00 20 00 00 00 00 00 00  0d 00 00 00 00 00 00 00  |. ..............|
-000000e0  00 10 00 00 06 00 00 00  00 00 00 00 00 00 00 00  |................|
-000000f0  00 04 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000100  05 00 00 00 b8 00 00 00  04 00 00 00 2a 00 00 00  |............*...|
-00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000190  00 20 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |. ..............|
-000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00001000  b8 01 00 00 02 bf 09 00  00 00 0f 05 f4           |.............|
-0000100d
diff --git a/src/cmd/newlink/testdata/macho.amd64.hello b/src/cmd/newlink/testdata/macho.amd64.hello
deleted file mode 100644
index 45e70d0..0000000
--- a/src/cmd/newlink/testdata/macho.amd64.hello
+++ /dev/null
@@ -1,39 +0,0 @@
-00000000  cf fa ed fe 07 00 00 01  03 00 00 00 02 00 00 00  |................|
-00000010  04 00 00 00 30 02 00 00  01 00 00 00 00 00 00 00  |....0...........|
-00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|
-00000030  52 4f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |RO..............|
-00000040  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  00 00 00 00 00 00 00 00  19 00 00 00 98 00 00 00  |................|
-00000070  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000080  00 10 00 00 00 00 00 00  23 10 00 00 00 00 00 00  |........#.......|
-00000090  00 00 00 00 00 00 00 00  23 10 00 00 00 00 00 00  |........#.......|
-000000a0  07 00 00 00 05 00 00 00  01 00 00 00 00 00 00 00  |................|
-000000b0  5f 5f 74 65 78 74 00 00  00 00 00 00 00 00 00 00  |__text..........|
-000000c0  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-000000d0  00 20 00 00 00 00 00 00  23 00 00 00 00 00 00 00  |. ......#.......|
-000000e0  00 10 00 00 06 00 00 00  00 00 00 00 00 00 00 00  |................|
-000000f0  00 04 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000100  19 00 00 00 98 00 00 00  5f 5f 44 41 54 41 00 00  |........__DATA..|
-00000110  00 00 00 00 00 00 00 00  00 30 00 00 00 00 00 00  |.........0......|
-00000120  0c 00 00 00 00 00 00 00  00 20 00 00 00 00 00 00  |......... ......|
-00000130  0c 00 00 00 00 00 00 00  03 00 00 00 03 00 00 00  |................|
-00000140  01 00 00 00 00 00 00 00  5f 5f 64 61 74 61 00 00  |........__data..|
-00000150  00 00 00 00 00 00 00 00  5f 5f 44 41 54 41 00 00  |........__DATA..|
-00000160  00 00 00 00 00 00 00 00  00 30 00 00 00 00 00 00  |.........0......|
-00000170  0c 00 00 00 00 00 00 00  00 20 00 00 06 00 00 00  |......... ......|
-00000180  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000190  00 00 00 00 00 00 00 00  05 00 00 00 b8 00 00 00  |................|
-000001a0  04 00 00 00 2a 00 00 00  00 00 00 00 00 00 00 00  |....*...........|
-000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00000220  00 00 00 00 00 00 00 00  00 20 00 00 00 00 00 00  |......... ......|
-00000230  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00001000  b8 04 00 00 02 bf 01 00  00 00 be 00 30 00 00 ba  |............0...|
-00001010  0c 00 00 00 0f 05 b8 01  00 00 02 bf 09 00 00 00  |................|
-00001020  0f 05 f4 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00001030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00002000  68 65 6c 6c 6f 20 77 6f  72 6c 64 0a              |hello world.|
-0000200c
diff --git a/src/cmd/newlink/testdata/macho.amd64.helloro b/src/cmd/newlink/testdata/macho.amd64.helloro
deleted file mode 100644
index 4b70fbd..0000000
--- a/src/cmd/newlink/testdata/macho.amd64.helloro
+++ /dev/null
@@ -1,34 +0,0 @@
-00000000  cf fa ed fe 07 00 00 01  03 00 00 00 02 00 00 00  |................|
-00000010  03 00 00 00 e8 01 00 00  01 00 00 00 00 00 00 00  |................|
-00000020  19 00 00 00 48 00 00 00  5f 5f 50 41 47 45 5a 45  |....H...__PAGEZE|
-00000030  52 4f 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |RO..............|
-00000040  00 10 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000060  00 00 00 00 00 00 00 00  19 00 00 00 e8 00 00 00  |................|
-00000070  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000080  00 10 00 00 00 00 00 00  0c 20 00 00 00 00 00 00  |......... ......|
-00000090  00 00 00 00 00 00 00 00  0c 20 00 00 00 00 00 00  |......... ......|
-000000a0  07 00 00 00 05 00 00 00  02 00 00 00 00 00 00 00  |................|
-000000b0  5f 5f 74 65 78 74 00 00  00 00 00 00 00 00 00 00  |__text..........|
-000000c0  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-000000d0  00 20 00 00 00 00 00 00  23 00 00 00 00 00 00 00  |. ......#.......|
-000000e0  00 10 00 00 06 00 00 00  00 00 00 00 00 00 00 00  |................|
-000000f0  00 04 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000100  5f 5f 72 6f 64 61 74 61  00 00 00 00 00 00 00 00  |__rodata........|
-00000110  5f 5f 54 45 58 54 00 00  00 00 00 00 00 00 00 00  |__TEXT..........|
-00000120  00 30 00 00 00 00 00 00  0c 00 00 00 00 00 00 00  |.0..............|
-00000130  00 20 00 00 06 00 00 00  00 00 00 00 00 00 00 00  |. ..............|
-00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00000150  05 00 00 00 b8 00 00 00  04 00 00 00 2a 00 00 00  |............*...|
-00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-000001e0  00 20 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |. ..............|
-000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00001000  b8 04 00 00 02 bf 01 00  00 00 be 00 30 00 00 ba  |............0...|
-00001010  0c 00 00 00 0f 05 b8 01  00 00 02 bf 00 00 00 00  |................|
-00001020  0f 05 f4 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-00001030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
-*
-00002000  68 65 6c 6c 6f 20 77 6f  72 6c 64 0a              |hello world.|
-0000200c
diff --git a/src/cmd/newlink/testdata/pclntab.6 b/src/cmd/newlink/testdata/pclntab.6
deleted file mode 100644
index d029bb7..0000000
Binary files a/src/cmd/newlink/testdata/pclntab.6 and /dev/null differ
diff --git a/src/cmd/newlink/testdata/pclntab.s b/src/cmd/newlink/testdata/pclntab.s
deleted file mode 100644
index 12dac70..0000000
--- a/src/cmd/newlink/testdata/pclntab.s
+++ /dev/null
@@ -1,1751 +0,0 @@
-// generated by genpcln.go; do not edit
-
-#line 1 "input"
-TEXT func0(SB),7,$48-592
-	FUNCDATA $1, funcdata0(SB)
-#line 1 "input"
-#line 1 "input"
-/*0x0004*/	MOVL $0x1234567, AX
-#line 1 "input"
-/*0x0009*/	BYTE $0
-/*      */	PCDATA $1, $110
-#line 1 "input"
-/*0x000a*/	BYTE $0
-#line 1 "input"
-/*0x000b*/	BYTE $0
-/*      */	PCDATA $1, $422
-#line 1 "input"
-/*0x000c*/	BYTE $0
-#line 1 "input"
-/*0x000d*/	BYTE $0
-#line 1 "input"
-/*0x000e*/	POPQ AX
-#line 1 "input"
-/*0x000f*/	MOVL $0x1234567, AX
-#line 1 "input"
-/*0x0014*/	BYTE $0
-#line 1 "input"
-/*0x0015*/	BYTE $0
-#line 1 "input"
-/*0x0016*/	BYTE $0
-#line 542 "input"
-/*0x0017*/	BYTE $0
-#line 960 "input"
-/*0x0018*/	MOVL $0x1234567, AX
-#line 960 "input"
-/*0x001d*/	BYTE $0
-#line 960 "input"
-/*0x001e*/	PUSHQ AX
-#line 960 "input"
-/*0x001f*/	BYTE $0
-#line 960 "input"
-/*0x0020*/	BYTE $0
-#line 594 "input"
-/*0x0021*/	BYTE $0
-#line 671 "input"
-/*0x0022*/	MOVL $0x1234567, AX
-#line 671 "input"
-/*0x0027*/	BYTE $0
-#line 671 "input"
-/*0x0028*/	BYTE $0
-#line 230 "input"
-/*0x0029*/	BYTE $0
-#line 230 "input"
-/*0x002a*/	BYTE $0
-#line 413 "input"
-/*0x002b*/	BYTE $0
-#line 413 "input"
-/*0x002c*/	BYTE $0
-#line 413 "input"
-/*0x002d*/	BYTE $0
-#line 729 "input"
-/*0x002e*/	BYTE $0
-#line 729 "input"
-/*0x002f*/	BYTE $0
-#line 729 "input"
-/*0x0030*/	BYTE $0
-#line 948 "input"
-/*0x0031*/	BYTE $0
-#line 11 "input"
-/*0x0032*/	MOVQ $0x123456789, AX
-#line 11 "input"
-/*0x003c*/	MOVL $0x1234567, AX
-#line 11 "input"
-/*0x0041*/	BYTE $0
-#line 11 "input"
-/*0x0042*/	BYTE $0
-#line 11 "input"
-/*0x0043*/	POPQ AX
-/*      */	PCDATA $2, $342
-#line 11 "input"
-/*0x0044*/	MOVQ $0x123456789, AX
-#line 11 "input"
-/*0x004e*/	MOVQ $0x123456789, AX
-#line 11 "input"
-/*0x0058*/	MOVL $0x1234567, AX
-#line 11 "input"
-/*0x005d*/	BYTE $0
-#line 11 "input"
-/*0x005e*/	BYTE $0
-#line 70 "input"
-/*0x005f*/	BYTE $0
-#line 70 "input"
-/*0x0060*/	BYTE $0
-#line 70 "input"
-/*0x0061*/	BYTE $0
-#line 18 "input"
-/*0x0062*/	MOVQ $0x123456789, AX
-#line 18 "input"
-/*0x006c*/	MOVL $0x1234567, AX
-#line 18 "input"
-/*0x0071*/	BYTE $0
-#line 814 "input"
-/*0x0072*/	BYTE $0
-#line 814 "input"
-/*0x0073*/	PUSHQ AX
-#line 763 "input"
-/*0x0074*/	BYTE $0
-#line 763 "input"
-/*0x0075*/	BYTE $0
-#line 763 "input"
-/*0x0076*/	BYTE $0
-#line 530 "input"
-/*0x0077*/	BYTE $0
-#line 530 "input"
-/*0x0078*/	BYTE $0
-#line 530 "input"
-/*0x0079*/	BYTE $0
-#line 530 "input"
-/*0x007a*/	BYTE $0
-#line 985 "input"
-/*0x007b*/	BYTE $0
-#line 985 "input"
-/*0x007c*/	BYTE $0
-#line 985 "input"
-/*0x007d*/	BYTE $0
-#line 985 "input"
-/*0x007e*/	PUSHQ AX
-#line 985 "input"
-/*0x007f*/	MOVL $0x1234567, AX
-#line 958 "input"
-/*0x0084*/	BYTE $0
-#line 368 "input"
-/*0x0085*/	MOVQ $0x123456789, AX
-#line 368 "input"
-/*0x008f*/	MOVL $0x1234567, AX
-#line 368 "input"
-/*0x0094*/	BYTE $0
-#line 368 "input"
-/*0x0095*/	BYTE $0
-#line 368 "input"
-/*0x0096*/	BYTE $0
-#line 368 "input"
-/*0x0097*/	BYTE $0
-#line 75 "file0.s"
-/*0x0098*/	BYTE $0
-#line 75 "file0.s"
-/*0x0099*/	BYTE $0
-#line 75 "file0.s"
-/*0x009a*/	BYTE $0
-#line 75 "file0.s"
-/*0x009b*/	BYTE $0
-#line 588 "file0.s"
-/*0x009c*/	MOVQ $0x123456789, AX
-#line 187 "file0.s"
-/*0x00a6*/	MOVQ $0x123456789, AX
-#line 187 "file0.s"
-/*0x00b0*/	BYTE $0
-#line 202 "file0.s"
-/*0x00b1*/	MOVL $0x1234567, AX
-#line 202 "file0.s"
-/*0x00b6*/	BYTE $0
-#line 887 "file0.s"
-/*0x00b7*/	MOVL $0x1234567, AX
-#line 887 "file0.s"
-/*0x00bc*/	BYTE $0
-#line 887 "file0.s"
-/*0x00bd*/	BYTE $0
-#line 480 "file0.s"
-/*0x00be*/	MOVL $0x1234567, AX
-#line 480 "file0.s"
-/*0x00c3*/	BYTE $0
-#line 40 "file8.s"
-/*0x00c4*/	BYTE $0
-#line 17 "file0.s"
-/*0x00c5*/	MOVQ $0x123456789, AX
-#line 17 "file0.s"
-/*0x00cf*/	BYTE $0
-#line 17 "file0.s"
-/*0x00d0*/	BYTE $0
-#line 17 "file0.s"
-/*0x00d1*/	BYTE $0
-#line 17 "file0.s"
-/*0x00d2*/	BYTE $0
-#line 436 "file0.s"
-/*0x00d3*/	MOVL $0x1234567, AX
-#line 436 "file0.s"
-/*0x00d8*/	BYTE $0
-#line 436 "file0.s"
-/*0x00d9*/	BYTE $0
-#line 346 "file0.s"
-/*0x00da*/	BYTE $0
-#line 346 "file0.s"
-/*0x00db*/	BYTE $0
-#line 346 "file0.s"
-/*0x00dc*/	BYTE $0
-#line 812 "file0.s"
-/*0x00dd*/	BYTE $0
-#line 812 "file0.s"
-/*0x00de*/	BYTE $0
-#line 812 "file0.s"
-/*0x00df*/	BYTE $0
-#line 812 "file0.s"
-/*0x00e0*/	BYTE $0
-#line 94 "file1.s"
-/*0x00e1*/	BYTE $0
-#line 94 "file1.s"
-/*0x00e2*/	BYTE $0
-#line 165 "file1.s"
-/*0x00e3*/	MOVL $0x1234567, AX
-#line 165 "file1.s"
-/*0x00e8*/	BYTE $0
-#line 456 "file1.s"
-/*0x00e9*/	BYTE $0
-#line 810 "file1.s"
-/*0x00ea*/	BYTE $0
-#line 722 "file1.s"
-/*0x00eb*/	BYTE $0
-#line 722 "file1.s"
-/*0x00ec*/	BYTE $0
-#line 722 "file1.s"
-/*0x00ed*/	BYTE $0
-#line 722 "file1.s"
-/*0x00ee*/	BYTE $0
-#line 722 "file1.s"
-/*0x00ef*/	PUSHQ AX
-#line 722 "file1.s"
-/*0x00f0*/	BYTE $0
-#line 722 "file1.s"
-/*0x00f1*/	BYTE $0
-#line 722 "file1.s"
-/*0x00f2*/	BYTE $0
-#line 722 "file1.s"
-/*0x00f3*/	BYTE $0
-/*      */	PCDATA $2, $246
-#line 722 "file1.s"
-/*0x00f4*/	MOVQ $0x123456789, AX
-#line 722 "file1.s"
-/*0x00fe*/	MOVQ $0x123456789, AX
-#line 722 "file1.s"
-/*0x0108*/	MOVL $0x1234567, AX
-#line 722 "file1.s"
-/*0x010d*/	BYTE $0
-#line 722 "file1.s"
-/*0x010e*/	BYTE $0
-#line 497 "file1.s"
-/*0x010f*/	MOVQ $0x123456789, AX
-#line 497 "file1.s"
-/*0x0119*/	MOVQ $0x123456789, AX
-#line 497 "file1.s"
-/*0x0123*/	MOVQ $0x123456789, AX
-#line 497 "file1.s"
-/*0x012d*/	MOVL $0x1234567, AX
-#line 497 "file1.s"
-/*0x0132*/	BYTE $0
-#line 686 "file1.s"
-/*0x0133*/	BYTE $0
-#line 686 "file1.s"
-/*0x0134*/	BYTE $0
-#line 248 "file1.s"
-/*0x0135*/	BYTE $0
-#line 248 "file1.s"
-/*0x0136*/	BYTE $0
-#line 248 "file1.s"
-/*0x0137*/	BYTE $0
-#line 248 "file1.s"
-/*0x0138*/	BYTE $0
-#line 307 "file1.s"
-/*0x0139*/	BYTE $0
-#line 220 "file1.s"
-/*0x013a*/	MOVL $0x1234567, AX
-#line 220 "file1.s"
-/*0x013f*/	BYTE $0
-#line 220 "file1.s"
-/*0x0140*/	BYTE $0
-#line 467 "file1.s"
-/*0x0141*/	MOVQ $0x123456789, AX
-#line 467 "file1.s"
-/*0x014b*/	BYTE $0
-#line 467 "file1.s"
-/*0x014c*/	BYTE $0
-#line 467 "file1.s"
-/*0x014d*/	BYTE $0
-#line 467 "file1.s"
-/*0x014e*/	BYTE $0
-#line 786 "file1.s"
-/*0x014f*/	MOVL $0x1234567, AX
-#line 251 "file1.s"
-/*0x0154*/	BYTE $0
-/*      */	PCDATA $2, $64
-#line 251 "file1.s"
-/*0x0155*/	BYTE $0
-#line 251 "file1.s"
-/*0x0156*/	BYTE $0
-#line 251 "file1.s"
-/*0x0157*/	BYTE $0
-#line 618 "file1.s"
-/*0x0158*/	MOVQ $0x123456789, AX
-/*      */	PCDATA $1, $686
-#line 618 "file1.s"
-/*0x0162*/	BYTE $0
-#line 618 "file1.s"
-/*0x0163*/	BYTE $0
-#line 618 "file1.s"
-/*0x0164*/	BYTE $0
-#line 618 "file1.s"
-/*0x0165*/	PUSHQ AX
-/*      */	PCDATA $2, $915
-#line 618 "file1.s"
-/*0x0166*/	BYTE $0
-#line 618 "file1.s"
-/*0x0167*/	BYTE $0
-#line 618 "file1.s"
-/*0x0168*/	BYTE $0
-#line 618 "file1.s"
-/*0x0169*/	BYTE $0
-#line 230 "file1.s"
-/*0x016a*/	BYTE $0
-#line 823 "file1.s"
-/*0x016b*/	BYTE $0
-#line 145 "file1.s"
-/*0x016c*/	MOVQ $0x123456789, AX
-#line 145 "file1.s"
-/*0x0176*/	BYTE $0
-#line 145 "file1.s"
-/*0x0177*/	BYTE $0
-#line 675 "file1.s"
-/*0x0178*/	BYTE $0
-#line 62 "file9.s"
-/*0x0179*/	BYTE $0
-/*      */	PCDATA $2, $768
-#line 62 "file9.s"
-/*0x017a*/	BYTE $0
-#line 62 "file9.s"
-/*0x017b*/	BYTE $0
-#line 29 "file9.s"
-/*0x017c*/	BYTE $0
-#line 29 "file9.s"
-/*0x017d*/	BYTE $0
-#line 29 "file9.s"
-/*0x017e*/	BYTE $0
-#line 29 "file9.s"
-/*0x017f*/	BYTE $0
-#line 65 "file4.s"
-/*0x0180*/	BYTE $0
-#line 77 "file3.s"
-/*0x0181*/	MOVL $0x1234567, AX
-#line 77 "file3.s"
-/*0x0186*/	BYTE $0
-#line 77 "file3.s"
-/*0x0187*/	BYTE $0
-#line 77 "file3.s"
-/*0x0188*/	BYTE $0
-#line 307 "file3.s"
-/*0x0189*/	MOVQ $0x123456789, AX
-#line 307 "file3.s"
-/*0x0193*/	BYTE $0
-#line 654 "file3.s"
-/*0x0194*/	BYTE $0
-#line 654 "file3.s"
-/*0x0195*/	BYTE $0
-#line 115 "file3.s"
-/*0x0196*/	MOVL $0x1234567, AX
-#line 115 "file3.s"
-/*0x019b*/	BYTE $0
-#line 115 "file3.s"
-/*0x019c*/	BYTE $0
-#line 115 "file3.s"
-/*0x019d*/	BYTE $0
-#line 115 "file3.s"
-/*0x019e*/	BYTE $0
-#line 154 "file3.s"
-/*0x019f*/	MOVQ $0x123456789, AX
-#line 166 "file3.s"
-/*0x01a9*/	BYTE $0
-#line 166 "file3.s"
-/*0x01aa*/	BYTE $0
-#line 166 "file3.s"
-/*0x01ab*/	BYTE $0
-/*      */	PCDATA $1, $523
-#line 166 "file3.s"
-/*0x01ac*/	MOVL $0x1234567, AX
-#line 166 "file3.s"
-/*0x01b1*/	BYTE $0
-#line 779 "file3.s"
-/*0x01b2*/	BYTE $0
-#line 779 "file3.s"
-/*0x01b3*/	BYTE $0
-#line 515 "file3.s"
-/*0x01b4*/	BYTE $0
-#line 515 "file3.s"
-/*0x01b5*/	BYTE $0
-#line 369 "file3.s"
-/*0x01b6*/	MOVL $0x1234567, AX
-#line 369 "file3.s"
-/*0x01bb*/	BYTE $0
-#line 369 "file3.s"
-/*0x01bc*/	BYTE $0
-#line 369 "file3.s"
-/*0x01bd*/	BYTE $0
-#line 680 "file3.s"
-/*0x01be*/	BYTE $0
-#line 680 "file3.s"
-/*0x01bf*/	BYTE $0
-#line 680 "file3.s"
-/*0x01c0*/	BYTE $0
-#line 680 "file3.s"
-/*0x01c1*/	BYTE $0
-#line 131 "file3.s"
-/*0x01c2*/	MOVQ $0x123456789, AX
-#line 131 "file3.s"
-/*0x01cc*/	BYTE $0
-#line 131 "file3.s"
-/*0x01cd*/	BYTE $0
-#line 131 "file3.s"
-/*0x01ce*/	BYTE $0
-#line 131 "file3.s"
-/*0x01cf*/	BYTE $0
-#line 848 "file3.s"
-/*0x01d0*/	BYTE $0
-#line 848 "file3.s"
-/*0x01d1*/	BYTE $0
-#line 848 "file3.s"
-/*0x01d2*/	POPQ AX
-#line 848 "file3.s"
-/*0x01d3*/	BYTE $0
-#line 848 "file3.s"
-/*0x01d4*/	BYTE $0
-#line 848 "file3.s"
-/*0x01d5*/	BYTE $0
-/*      */	PCDATA $1, $86
-#line 848 "file3.s"
-/*0x01d6*/	MOVL $0x1234567, AX
-#line 438 "file3.s"
-/*0x01db*/	MOVQ $0x123456789, AX
-#line 438 "file3.s"
-/*0x01e5*/	MOVL $0x1234567, AX
-#line 5 "file3.s"
-/*0x01ea*/	BYTE $0
-#line 5 "file3.s"
-/*0x01eb*/	BYTE $0
-#line 531 "file3.s"
-/*0x01ec*/	MOVQ $0x123456789, AX
-#line 531 "file3.s"
-/*0x01f6*/	MOVQ $0x123456789, AX
-#line 531 "file3.s"
-/*0x0200*/	MOVQ $0x123456789, AX
-#line 531 "file3.s"
-/*0x020a*/	MOVL $0x1234567, AX
-#line 863 "file3.s"
-/*0x020f*/	BYTE $0
-#line 733 "file3.s"
-/*0x0210*/	MOVQ $0x123456789, AX
-#line 166 "file3.s"
-/*0x021a*/	MOVQ $0x123456789, AX
-#line 166 "file3.s"
-/*0x0224*/	BYTE $0
-#line 166 "file3.s"
-/*0x0225*/	BYTE $0
-#line 166 "file3.s"
-/*0x0226*/	BYTE $0
-#line 166 "file3.s"
-/*0x0227*/	BYTE $0
-#line 54 "file3.s"
-/*0x0228*/	MOVQ $0x123456789, AX
-#line 54 "file3.s"
-/*0x0232*/	BYTE $0
-#line 54 "file3.s"
-/*0x0233*/	BYTE $0
-#line 54 "file3.s"
-/*0x0234*/	BYTE $0
-#line 20 "file4.s"
-/*0x0235*/	BYTE $0
-#line 20 "file4.s"
-/*0x0236*/	BYTE $0
-#line 546 "file4.s"
-/*0x0237*/	BYTE $0
-#line 546 "file4.s"
-/*0x0238*/	BYTE $0
-#line 74 "file4.s"
-/*0x0239*/	BYTE $0
-#line 31 "file4.s"
-/*0x023a*/	BYTE $0
-#line 31 "file4.s"
-/*0x023b*/	BYTE $0
-#line 31 "file4.s"
-/*0x023c*/	BYTE $0
-#line 31 "file4.s"
-/*0x023d*/	BYTE $0
-#line 834 "file4.s"
-/*0x023e*/	BYTE $0
-#line 834 "file4.s"
-/*0x023f*/	BYTE $0
-#line 519 "file4.s"
-/*0x0240*/	MOVL $0x1234567, AX
-#line 342 "file4.s"
-/*0x0245*/	BYTE $0
-#line 342 "file4.s"
-/*0x0246*/	BYTE $0
-#line 342 "file4.s"
-/*0x0247*/	BYTE $0
-#line 458 "file4.s"
-/*0x0248*/	BYTE $0
-#line 458 "file4.s"
-/*0x0249*/	BYTE $0
-#line 458 "file4.s"
-/*0x024a*/	BYTE $0
-#line 458 "file4.s"
-/*0x024b*/	BYTE $0
-#line 13 "file9.s"
-/*0x024c*/	BYTE $0
-#line 13 "file9.s"
-/*0x024d*/	BYTE $0
-#line 13 "file9.s"
-/*0x024e*/	BYTE $0
-#line 365 "file9.s"
-/*0x024f*/	BYTE $0
-#line 749 "file9.s"
-/*0x0250*/	MOVL $0x1234567, AX
-#line 749 "file9.s"
-/*0x0255*/	BYTE $0
-#line 749 "file9.s"
-/*0x0256*/	BYTE $0
-#line 41 "file0.s"
-/*0x0257*/	MOVL $0x1234567, AX
-#line 41 "file0.s"
-/*0x025c*/	BYTE $0
-#line 41 "file0.s"
-/*0x025d*/	BYTE $0
-#line 41 "file0.s"
-/*0x025e*/	BYTE $0
-#line 869 "file0.s"
-/*0x025f*/	BYTE $0
-#line 881 "file0.s"
-/*0x0260*/	MOVQ $0x123456789, AX
-#line 881 "file0.s"
-/*0x026a*/	MOVQ $0x123456789, AX
-	POPQ AX
-	POPQ AX
-	RET
-
-GLOBL funcdata0(SB), $16
-#line 1 "input"
-TEXT func1(SB),7,$40-648
-	FUNCDATA $1, funcdata1(SB)
-#line 1 "input"
-#line 1 "input"
-/*0x0004*/	BYTE $0
-#line 12 "file4.s"
-/*0x0005*/	MOVL $0x1234567, AX
-#line 12 "file4.s"
-/*0x000a*/	BYTE $0
-#line 12 "file4.s"
-/*0x000b*/	BYTE $0
-#line 12 "file4.s"
-/*0x000c*/	BYTE $0
-/*      */	PCDATA $2, $705
-#line 12 "file4.s"
-/*0x000d*/	MOVQ $0x123456789, AX
-#line 12 "file4.s"
-/*0x0017*/	BYTE $0
-#line 633 "file4.s"
-/*0x0018*/	MOVQ $0x123456789, AX
-#line 633 "file4.s"
-/*0x0022*/	MOVL $0x1234567, AX
-#line 633 "file4.s"
-/*0x0027*/	POPQ AX
-#line 633 "file4.s"
-/*0x0028*/	BYTE $0
-#line 633 "file4.s"
-/*0x0029*/	BYTE $0
-#line 633 "file4.s"
-/*0x002a*/	BYTE $0
-#line 633 "file4.s"
-/*0x002b*/	PUSHQ AX
-#line 633 "file4.s"
-/*0x002c*/	MOVL $0x1234567, AX
-#line 997 "file4.s"
-/*0x0031*/	BYTE $0
-#line 997 "file4.s"
-/*0x0032*/	BYTE $0
-#line 997 "file4.s"
-/*0x0033*/	BYTE $0
-#line 997 "file4.s"
-/*0x0034*/	BYTE $0
-#line 997 "file4.s"
-/*0x0035*/	POPQ AX
-#line 997 "file4.s"
-/*0x0036*/	BYTE $0
-#line 997 "file4.s"
-/*0x0037*/	BYTE $0
-#line 1 "file4.s"
-/*0x0038*/	MOVQ $0x123456789, AX
-#line 1 "file4.s"
-/*0x0042*/	MOVQ $0x123456789, AX
-#line 1 "file4.s"
-/*0x004c*/	MOVQ $0x123456789, AX
-#line 1 "file4.s"
-/*0x0056*/	MOVQ $0x123456789, AX
-#line 1 "file4.s"
-/*0x0060*/	BYTE $0
-#line 922 "file4.s"
-/*0x0061*/	BYTE $0
-#line 375 "file4.s"
-/*0x0062*/	MOVL $0x1234567, AX
-/*      */	PCDATA $1, $51
-#line 31 "file4.s"
-/*0x0067*/	MOVQ $0x123456789, AX
-#line 31 "file4.s"
-/*0x0071*/	BYTE $0
-#line 620 "file4.s"
-/*0x0072*/	MOVL $0x1234567, AX
-#line 620 "file4.s"
-/*0x0077*/	BYTE $0
-#line 695 "file4.s"
-/*0x0078*/	MOVL $0x1234567, AX
-#line 799 "file4.s"
-/*0x007d*/	MOVL $0x1234567, AX
-#line 41 "file4.s"
-/*0x0082*/	BYTE $0
-#line 795 "file4.s"
-/*0x0083*/	MOVL $0x1234567, AX
-#line 908 "file4.s"
-/*0x0088*/	BYTE $0
-#line 905 "file4.s"
-/*0x0089*/	BYTE $0
-#line 905 "file4.s"
-/*0x008a*/	BYTE $0
-#line 905 "file4.s"
-/*0x008b*/	BYTE $0
-#line 905 "file4.s"
-/*0x008c*/	BYTE $0
-#line 861 "file4.s"
-/*0x008d*/	MOVL $0x1234567, AX
-#line 861 "file4.s"
-/*0x0092*/	BYTE $0
-#line 861 "file4.s"
-/*0x0093*/	BYTE $0
-#line 861 "file4.s"
-/*0x0094*/	BYTE $0
-#line 861 "file4.s"
-/*0x0095*/	BYTE $0
-/*      */	PCDATA $1, $192
-#line 861 "file4.s"
-/*0x0096*/	MOVQ $0x123456789, AX
-/*      */	PCDATA $1, $60
-#line 861 "file4.s"
-/*0x00a0*/	MOVL $0x1234567, AX
-#line 861 "file4.s"
-/*0x00a5*/	BYTE $0
-#line 861 "file4.s"
-/*0x00a6*/	BYTE $0
-#line 56 "file6.s"
-/*0x00a7*/	MOVQ $0x123456789, AX
-#line 56 "file6.s"
-/*0x00b1*/	BYTE $0
-#line 56 "file6.s"
-/*0x00b2*/	BYTE $0
-#line 56 "file6.s"
-/*0x00b3*/	BYTE $0
-#line 204 "file6.s"
-/*0x00b4*/	BYTE $0
-#line 204 "file6.s"
-/*0x00b5*/	BYTE $0
-#line 204 "file6.s"
-/*0x00b6*/	BYTE $0
-#line 204 "file6.s"
-/*0x00b7*/	BYTE $0
-#line 979 "file6.s"
-/*0x00b8*/	MOVL $0x1234567, AX
-#line 979 "file6.s"
-/*0x00bd*/	BYTE $0
-#line 979 "file6.s"
-/*0x00be*/	BYTE $0
-#line 979 "file6.s"
-/*0x00bf*/	BYTE $0
-#line 58 "file6.s"
-/*0x00c0*/	MOVL $0x1234567, AX
-#line 238 "file6.s"
-/*0x00c5*/	MOVL $0x1234567, AX
-#line 238 "file6.s"
-/*0x00ca*/	BYTE $0
-#line 238 "file6.s"
-/*0x00cb*/	BYTE $0
-#line 699 "file2.s"
-/*0x00cc*/	MOVQ $0x123456789, AX
-#line 699 "file2.s"
-/*0x00d6*/	BYTE $0
-#line 699 "file2.s"
-/*0x00d7*/	BYTE $0
-#line 514 "file2.s"
-/*0x00d8*/	MOVL $0x1234567, AX
-#line 514 "file2.s"
-/*0x00dd*/	BYTE $0
-#line 514 "file2.s"
-/*0x00de*/	BYTE $0
-#line 108 "file2.s"
-/*0x00df*/	MOVQ $0x123456789, AX
-#line 108 "file2.s"
-/*0x00e9*/	MOVQ $0x123456789, AX
-#line 108 "file2.s"
-/*0x00f3*/	MOVL $0x1234567, AX
-#line 108 "file2.s"
-/*0x00f8*/	BYTE $0
-#line 108 "file2.s"
-/*0x00f9*/	BYTE $0
-#line 918 "file2.s"
-/*0x00fa*/	BYTE $0
-#line 918 "file2.s"
-/*0x00fb*/	BYTE $0
-#line 785 "file2.s"
-/*0x00fc*/	BYTE $0
-#line 3 "file5.s"
-/*0x00fd*/	BYTE $0
-#line 918 "file5.s"
-/*0x00fe*/	BYTE $0
-#line 918 "file5.s"
-/*0x00ff*/	BYTE $0
-#line 670 "file5.s"
-/*0x0100*/	MOVL $0x1234567, AX
-#line 670 "file5.s"
-/*0x0105*/	BYTE $0
-#line 720 "file5.s"
-/*0x0106*/	BYTE $0
-#line 384 "file5.s"
-/*0x0107*/	MOVQ $0x123456789, AX
-#line 384 "file5.s"
-/*0x0111*/	MOVQ $0x123456789, AX
-#line 384 "file5.s"
-/*0x011b*/	MOVQ $0x123456789, AX
-#line 384 "file5.s"
-/*0x0125*/	BYTE $0
-#line 384 "file5.s"
-/*0x0126*/	BYTE $0
-#line 263 "file5.s"
-/*0x0127*/	BYTE $0
-#line 750 "file5.s"
-/*0x0128*/	MOVL $0x1234567, AX
-#line 750 "file5.s"
-/*0x012d*/	BYTE $0
-#line 679 "file5.s"
-/*0x012e*/	MOVL $0x1234567, AX
-#line 679 "file5.s"
-/*0x0133*/	BYTE $0
-#line 679 "file5.s"
-/*0x0134*/	BYTE $0
-#line 679 "file5.s"
-/*0x0135*/	BYTE $0
-#line 679 "file5.s"
-/*0x0136*/	POPQ AX
-#line 171 "file5.s"
-/*0x0137*/	MOVL $0x1234567, AX
-#line 171 "file5.s"
-/*0x013c*/	BYTE $0
-#line 34 "file2.s"
-/*0x013d*/	BYTE $0
-#line 34 "file2.s"
-/*0x013e*/	BYTE $0
-#line 34 "file2.s"
-/*0x013f*/	BYTE $0
-#line 732 "file2.s"
-/*0x0140*/	BYTE $0
-#line 732 "file2.s"
-/*0x0141*/	PUSHQ AX
-#line 485 "file2.s"
-/*0x0142*/	BYTE $0
-#line 485 "file2.s"
-/*0x0143*/	BYTE $0
-#line 485 "file2.s"
-/*0x0144*/	BYTE $0
-#line 222 "file2.s"
-/*0x0145*/	BYTE $0
-#line 222 "file2.s"
-/*0x0146*/	BYTE $0
-/*      */	PCDATA $1, $462
-#line 222 "file2.s"
-/*0x0147*/	MOVQ $0x123456789, AX
-#line 222 "file2.s"
-/*0x0151*/	MOVL $0x1234567, AX
-#line 222 "file2.s"
-/*0x0156*/	BYTE $0
-#line 677 "file2.s"
-/*0x0157*/	BYTE $0
-#line 117 "file2.s"
-/*0x0158*/	MOVL $0x1234567, AX
-#line 117 "file2.s"
-/*0x015d*/	BYTE $0
-#line 117 "file2.s"
-/*0x015e*/	BYTE $0
-#line 361 "file2.s"
-/*0x015f*/	MOVL $0x1234567, AX
-#line 590 "file2.s"
-/*0x0164*/	BYTE $0
-#line 590 "file2.s"
-/*0x0165*/	BYTE $0
-#line 58 "file2.s"
-/*0x0166*/	MOVL $0x1234567, AX
-#line 58 "file2.s"
-/*0x016b*/	BYTE $0
-#line 58 "file2.s"
-/*0x016c*/	BYTE $0
-#line 58 "file2.s"
-/*0x016d*/	BYTE $0
-#line 58 "file2.s"
-/*0x016e*/	BYTE $0
-#line 983 "file2.s"
-/*0x016f*/	BYTE $0
-#line 983 "file2.s"
-/*0x0170*/	BYTE $0
-#line 983 "file2.s"
-/*0x0171*/	BYTE $0
-#line 983 "file2.s"
-/*0x0172*/	BYTE $0
-#line 727 "file2.s"
-/*0x0173*/	MOVL $0x1234567, AX
-#line 450 "file2.s"
-/*0x0178*/	BYTE $0
-#line 450 "file2.s"
-/*0x0179*/	BYTE $0
-#line 450 "file2.s"
-/*0x017a*/	BYTE $0
-#line 450 "file2.s"
-/*0x017b*/	BYTE $0
-#line 334 "file2.s"
-/*0x017c*/	BYTE $0
-#line 334 "file2.s"
-/*0x017d*/	BYTE $0
-#line 334 "file2.s"
-/*0x017e*/	BYTE $0
-#line 334 "file2.s"
-/*0x017f*/	BYTE $0
-#line 465 "file2.s"
-/*0x0180*/	MOVL $0x1234567, AX
-/*      */	PCDATA $1, $518
-#line 465 "file2.s"
-/*0x0185*/	MOVL $0x1234567, AX
-#line 465 "file2.s"
-/*0x018a*/	BYTE $0
-#line 465 "file2.s"
-/*0x018b*/	BYTE $0
-#line 465 "file2.s"
-/*0x018c*/	BYTE $0
-#line 465 "file2.s"
-/*0x018d*/	BYTE $0
-#line 682 "file2.s"
-/*0x018e*/	MOVL $0x1234567, AX
-#line 682 "file2.s"
-/*0x0193*/	BYTE $0
-#line 682 "file2.s"
-/*0x0194*/	BYTE $0
-#line 846 "file2.s"
-/*0x0195*/	MOVQ $0x123456789, AX
-#line 846 "file2.s"
-/*0x019f*/	BYTE $0
-#line 846 "file2.s"
-/*0x01a0*/	BYTE $0
-#line 846 "file2.s"
-/*0x01a1*/	POPQ AX
-#line 846 "file2.s"
-/*0x01a2*/	BYTE $0
-#line 846 "file2.s"
-/*0x01a3*/	BYTE $0
-#line 49 "file2.s"
-/*0x01a4*/	BYTE $0
-#line 49 "file2.s"
-/*0x01a5*/	BYTE $0
-#line 49 "file2.s"
-/*0x01a6*/	BYTE $0
-#line 726 "file2.s"
-/*0x01a7*/	MOVQ $0x123456789, AX
-#line 726 "file2.s"
-/*0x01b1*/	MOVL $0x1234567, AX
-#line 726 "file2.s"
-/*0x01b6*/	BYTE $0
-#line 726 "file2.s"
-/*0x01b7*/	BYTE $0
-#line 726 "file2.s"
-/*0x01b8*/	BYTE $0
-#line 726 "file2.s"
-/*0x01b9*/	PUSHQ AX
-#line 726 "file2.s"
-/*0x01ba*/	BYTE $0
-#line 726 "file2.s"
-/*0x01bb*/	BYTE $0
-#line 726 "file2.s"
-/*0x01bc*/	BYTE $0
-#line 726 "file2.s"
-/*0x01bd*/	BYTE $0
-#line 13 "file1.s"
-/*0x01be*/	BYTE $0
-#line 13 "file1.s"
-/*0x01bf*/	BYTE $0
-#line 13 "file1.s"
-/*0x01c0*/	BYTE $0
-#line 827 "file1.s"
-/*0x01c1*/	MOVL $0x1234567, AX
-#line 827 "file1.s"
-/*0x01c6*/	BYTE $0
-#line 827 "file1.s"
-/*0x01c7*/	BYTE $0
-#line 827 "file1.s"
-/*0x01c8*/	BYTE $0
-#line 827 "file1.s"
-/*0x01c9*/	BYTE $0
-#line 783 "file1.s"
-/*0x01ca*/	BYTE $0
-#line 783 "file1.s"
-/*0x01cb*/	BYTE $0
-#line 783 "file1.s"
-/*0x01cc*/	BYTE $0
-#line 783 "file1.s"
-/*0x01cd*/	BYTE $0
-#line 367 "file1.s"
-/*0x01ce*/	MOVQ $0x123456789, AX
-#line 367 "file1.s"
-/*0x01d8*/	MOVL $0x1234567, AX
-#line 367 "file1.s"
-/*0x01dd*/	BYTE $0
-#line 367 "file1.s"
-/*0x01de*/	BYTE $0
-#line 367 "file1.s"
-/*0x01df*/	BYTE $0
-#line 367 "file1.s"
-/*0x01e0*/	BYTE $0
-#line 581 "file1.s"
-/*0x01e1*/	BYTE $0
-#line 581 "file1.s"
-/*0x01e2*/	BYTE $0
-#line 581 "file1.s"
-/*0x01e3*/	BYTE $0
-#line 638 "file1.s"
-/*0x01e4*/	MOVQ $0x123456789, AX
-#line 638 "file1.s"
-/*0x01ee*/	MOVL $0x1234567, AX
-#line 638 "file1.s"
-/*0x01f3*/	BYTE $0
-#line 638 "file1.s"
-/*0x01f4*/	BYTE $0
-#line 638 "file1.s"
-/*0x01f5*/	BYTE $0
-#line 359 "file1.s"
-/*0x01f6*/	BYTE $0
-#line 449 "file1.s"
-/*0x01f7*/	BYTE $0
-#line 449 "file1.s"
-/*0x01f8*/	BYTE $0
-#line 449 "file1.s"
-/*0x01f9*/	BYTE $0
-#line 298 "file1.s"
-/*0x01fa*/	BYTE $0
-#line 298 "file1.s"
-/*0x01fb*/	BYTE $0
-#line 257 "file1.s"
-/*0x01fc*/	BYTE $0
-#line 257 "file1.s"
-/*0x01fd*/	BYTE $0
-#line 257 "file1.s"
-/*0x01fe*/	BYTE $0
-#line 512 "file1.s"
-/*0x01ff*/	MOVL $0x1234567, AX
-#line 512 "file1.s"
-/*0x0204*/	BYTE $0
-#line 512 "file1.s"
-/*0x0205*/	BYTE $0
-#line 617 "file1.s"
-/*0x0206*/	MOVL $0x1234567, AX
-#line 478 "file1.s"
-/*0x020b*/	BYTE $0
-/*      */	PCDATA $2, $351
-#line 478 "file1.s"
-/*0x020c*/	BYTE $0
-#line 958 "file1.s"
-/*0x020d*/	BYTE $0
-#line 958 "file1.s"
-/*0x020e*/	BYTE $0
-#line 958 "file1.s"
-/*0x020f*/	BYTE $0
-#line 958 "file1.s"
-/*0x0210*/	BYTE $0
-#line 371 "file1.s"
-/*0x0211*/	MOVQ $0x123456789, AX
-#line 371 "file1.s"
-/*0x021b*/	BYTE $0
-#line 371 "file1.s"
-/*0x021c*/	BYTE $0
-#line 56 "file3.s"
-/*0x021d*/	MOVL $0x1234567, AX
-#line 56 "file3.s"
-/*0x0222*/	BYTE $0
-#line 56 "file3.s"
-/*0x0223*/	BYTE $0
-#line 56 "file9.s"
-/*0x0224*/	MOVQ $0x123456789, AX
-#line 56 "file9.s"
-/*0x022e*/	BYTE $0
-#line 56 "file9.s"
-/*0x022f*/	BYTE $0
-#line 56 "file9.s"
-/*0x0230*/	BYTE $0
-#line 56 "file9.s"
-/*0x0231*/	BYTE $0
-#line 684 "file9.s"
-/*0x0232*/	MOVQ $0x123456789, AX
-#line 684 "file9.s"
-/*0x023c*/	BYTE $0
-#line 684 "file9.s"
-/*0x023d*/	POPQ AX
-#line 407 "file9.s"
-/*0x023e*/	MOVL $0x1234567, AX
-#line 407 "file9.s"
-/*0x0243*/	BYTE $0
-	PUSHQ AX
-	PUSHQ AX
-	RET
-
-GLOBL funcdata1(SB), $16
-#line 1 "input"
-TEXT func2(SB),7,$40-688
-	FUNCDATA $1, funcdata2(SB)
-#line 1 "input"
-#line 1 "input"
-/*0x0004*/	BYTE $0
-#line 860 "input"
-/*0x0005*/	BYTE $0
-#line 860 "input"
-/*0x0006*/	BYTE $0
-#line 860 "input"
-/*0x0007*/	BYTE $0
-#line 860 "input"
-/*0x0008*/	BYTE $0
-#line 85 "input"
-/*0x0009*/	BYTE $0
-#line 85 "input"
-/*0x000a*/	BYTE $0
-#line 355 "input"
-/*0x000b*/	MOVQ $0x123456789, AX
-#line 355 "input"
-/*0x0015*/	MOVL $0x1234567, AX
-#line 355 "input"
-/*0x001a*/	BYTE $0
-#line 355 "input"
-/*0x001b*/	BYTE $0
-#line 355 "input"
-/*0x001c*/	BYTE $0
-#line 840 "input"
-/*0x001d*/	MOVL $0x1234567, AX
-#line 840 "input"
-/*0x0022*/	BYTE $0
-#line 294 "input"
-/*0x0023*/	MOVQ $0x123456789, AX
-#line 294 "input"
-/*0x002d*/	MOVQ $0x123456789, AX
-#line 294 "input"
-/*0x0037*/	MOVQ $0x123456789, AX
-#line 294 "input"
-/*0x0041*/	BYTE $0
-#line 294 "input"
-/*0x0042*/	BYTE $0
-#line 294 "input"
-/*0x0043*/	BYTE $0
-#line 294 "input"
-/*0x0044*/	BYTE $0
-/*      */	PCDATA $1, $385
-#line 294 "input"
-/*0x0045*/	BYTE $0
-#line 294 "input"
-/*0x0046*/	BYTE $0
-#line 294 "input"
-/*0x0047*/	BYTE $0
-#line 81 "file9.s"
-/*0x0048*/	MOVL $0x1234567, AX
-#line 81 "file9.s"
-/*0x004d*/	BYTE $0
-#line 81 "file9.s"
-/*0x004e*/	BYTE $0
-#line 81 "file9.s"
-/*0x004f*/	POPQ AX
-#line 81 "file9.s"
-/*0x0050*/	MOVL $0x1234567, AX
-#line 81 "file9.s"
-/*0x0055*/	BYTE $0
-/*      */	PCDATA $1, $701
-#line 81 "file9.s"
-/*0x0056*/	MOVL $0x1234567, AX
-#line 81 "file9.s"
-/*0x005b*/	BYTE $0
-#line 81 "file9.s"
-/*0x005c*/	BYTE $0
-#line 81 "file9.s"
-/*0x005d*/	BYTE $0
-#line 81 "file9.s"
-/*0x005e*/	BYTE $0
-#line 290 "file9.s"
-/*0x005f*/	BYTE $0
-#line 290 "file9.s"
-/*0x0060*/	BYTE $0
-#line 290 "file9.s"
-/*0x0061*/	BYTE $0
-#line 197 "file9.s"
-/*0x0062*/	MOVL $0x1234567, AX
-#line 197 "file9.s"
-/*0x0067*/	BYTE $0
-#line 608 "file9.s"
-/*0x0068*/	MOVQ $0x123456789, AX
-#line 608 "file9.s"
-/*0x0072*/	MOVQ $0x123456789, AX
-#line 608 "file9.s"
-/*0x007c*/	BYTE $0
-/*      */	PCDATA $1, $562
-#line 608 "file9.s"
-/*0x007d*/	BYTE $0
-#line 608 "file9.s"
-/*0x007e*/	BYTE $0
-#line 189 "file9.s"
-/*0x007f*/	MOVL $0x1234567, AX
-#line 189 "file9.s"
-/*0x0084*/	BYTE $0
-#line 189 "file9.s"
-/*0x0085*/	BYTE $0
-#line 189 "file9.s"
-/*0x0086*/	BYTE $0
-#line 189 "file9.s"
-/*0x0087*/	BYTE $0
-#line 472 "file9.s"
-/*0x0088*/	MOVL $0x1234567, AX
-#line 472 "file9.s"
-/*0x008d*/	BYTE $0
-#line 472 "file9.s"
-/*0x008e*/	BYTE $0
-#line 472 "file9.s"
-/*0x008f*/	PUSHQ AX
-#line 472 "file9.s"
-/*0x0090*/	MOVQ $0x123456789, AX
-#line 472 "file9.s"
-/*0x009a*/	MOVL $0x1234567, AX
-#line 472 "file9.s"
-/*0x009f*/	BYTE $0
-#line 472 "file9.s"
-/*0x00a0*/	BYTE $0
-#line 472 "file9.s"
-/*0x00a1*/	BYTE $0
-#line 472 "file9.s"
-/*0x00a2*/	BYTE $0
-#line 148 "file9.s"
-/*0x00a3*/	MOVQ $0x123456789, AX
-#line 148 "file9.s"
-/*0x00ad*/	BYTE $0
-#line 148 "file9.s"
-/*0x00ae*/	BYTE $0
-#line 148 "file9.s"
-/*0x00af*/	BYTE $0
-#line 148 "file9.s"
-/*0x00b0*/	BYTE $0
-#line 562 "file9.s"
-/*0x00b1*/	MOVL $0x1234567, AX
-#line 562 "file9.s"
-/*0x00b6*/	BYTE $0
-#line 562 "file9.s"
-/*0x00b7*/	PUSHQ AX
-#line 562 "file9.s"
-/*0x00b8*/	BYTE $0
-#line 532 "file9.s"
-/*0x00b9*/	MOVQ $0x123456789, AX
-#line 532 "file9.s"
-/*0x00c3*/	MOVQ $0x123456789, AX
-#line 282 "file9.s"
-/*0x00cd*/	BYTE $0
-#line 282 "file9.s"
-/*0x00ce*/	BYTE $0
-#line 282 "file9.s"
-/*0x00cf*/	BYTE $0
-/*      */	PCDATA $2, $861
-#line 282 "file9.s"
-/*0x00d0*/	BYTE $0
-#line 282 "file9.s"
-/*0x00d1*/	BYTE $0
-/*      */	PCDATA $2, $310
-#line 282 "file9.s"
-/*0x00d2*/	BYTE $0
-#line 416 "file9.s"
-/*0x00d3*/	MOVQ $0x123456789, AX
-#line 416 "file9.s"
-/*0x00dd*/	MOVL $0x1234567, AX
-#line 780 "file9.s"
-/*0x00e2*/	BYTE $0
-#line 780 "file9.s"
-/*0x00e3*/	BYTE $0
-#line 765 "file9.s"
-/*0x00e4*/	MOVL $0x1234567, AX
-#line 523 "file9.s"
-/*0x00e9*/	BYTE $0
-#line 523 "file9.s"
-/*0x00ea*/	BYTE $0
-#line 523 "file9.s"
-/*0x00eb*/	BYTE $0
-#line 733 "file9.s"
-/*0x00ec*/	MOVQ $0x123456789, AX
-#line 378 "file9.s"
-/*0x00f6*/	BYTE $0
-#line 378 "file9.s"
-/*0x00f7*/	BYTE $0
-#line 378 "file9.s"
-/*0x00f8*/	BYTE $0
-#line 378 "file9.s"
-/*0x00f9*/	BYTE $0
-#line 540 "file9.s"
-/*0x00fa*/	BYTE $0
-#line 540 "file9.s"
-/*0x00fb*/	BYTE $0
-#line 57 "file9.s"
-/*0x00fc*/	BYTE $0
-#line 57 "file9.s"
-/*0x00fd*/	BYTE $0
-#line 57 "file9.s"
-/*0x00fe*/	BYTE $0
-#line 417 "file9.s"
-/*0x00ff*/	BYTE $0
-/*      */	PCDATA $1, $932
-#line 417 "file9.s"
-/*0x0100*/	BYTE $0
-#line 417 "file9.s"
-/*0x0101*/	BYTE $0
-#line 417 "file9.s"
-/*0x0102*/	BYTE $0
-#line 417 "file9.s"
-/*0x0103*/	BYTE $0
-#line 713 "file9.s"
-/*0x0104*/	MOVL $0x1234567, AX
-#line 610 "file0.s"
-/*0x0109*/	MOVQ $0x123456789, AX
-#line 610 "file0.s"
-/*0x0113*/	MOVL $0x1234567, AX
-#line 610 "file0.s"
-/*0x0118*/	BYTE $0
-#line 787 "file0.s"
-/*0x0119*/	MOVQ $0x123456789, AX
-#line 829 "file0.s"
-/*0x0123*/	BYTE $0
-#line 829 "file0.s"
-/*0x0124*/	BYTE $0
-#line 829 "file0.s"
-/*0x0125*/	BYTE $0
-#line 849 "file0.s"
-/*0x0126*/	BYTE $0
-#line 849 "file0.s"
-/*0x0127*/	BYTE $0
-#line 849 "file0.s"
-/*0x0128*/	BYTE $0
-/*      */	PCDATA $2, $356
-#line 849 "file0.s"
-/*0x0129*/	BYTE $0
-#line 849 "file0.s"
-/*0x012a*/	BYTE $0
-#line 88 "file0.s"
-/*0x012b*/	MOVL $0x1234567, AX
-#line 88 "file0.s"
-/*0x0130*/	BYTE $0
-#line 88 "file0.s"
-/*0x0131*/	BYTE $0
-#line 88 "file0.s"
-/*0x0132*/	BYTE $0
-#line 684 "file0.s"
-/*0x0133*/	BYTE $0
-#line 684 "file0.s"
-/*0x0134*/	BYTE $0
-#line 684 "file0.s"
-/*0x0135*/	BYTE $0
-#line 684 "file0.s"
-/*0x0136*/	BYTE $0
-#line 238 "file0.s"
-/*0x0137*/	BYTE $0
-#line 238 "file0.s"
-/*0x0138*/	BYTE $0
-#line 238 "file0.s"
-/*0x0139*/	PUSHQ AX
-#line 238 "file0.s"
-/*0x013a*/	BYTE $0
-#line 238 "file0.s"
-/*0x013b*/	BYTE $0
-#line 603 "file0.s"
-/*0x013c*/	BYTE $0
-#line 981 "file0.s"
-/*0x013d*/	BYTE $0
-#line 981 "file0.s"
-/*0x013e*/	POPQ AX
-#line 616 "file0.s"
-/*0x013f*/	BYTE $0
-#line 616 "file0.s"
-/*0x0140*/	BYTE $0
-#line 616 "file0.s"
-/*0x0141*/	BYTE $0
-#line 616 "file0.s"
-/*0x0142*/	BYTE $0
-#line 716 "file0.s"
-/*0x0143*/	MOVL $0x1234567, AX
-#line 716 "file0.s"
-/*0x0148*/	BYTE $0
-#line 716 "file0.s"
-/*0x0149*/	BYTE $0
-#line 34 "file0.s"
-/*0x014a*/	BYTE $0
-#line 34 "file0.s"
-/*0x014b*/	BYTE $0
-#line 34 "file0.s"
-/*0x014c*/	BYTE $0
-#line 90 "file0.s"
-/*0x014d*/	MOVL $0x1234567, AX
-#line 316 "file0.s"
-/*0x0152*/	MOVQ $0x123456789, AX
-#line 230 "file0.s"
-/*0x015c*/	MOVQ $0x123456789, AX
-#line 799 "file0.s"
-/*0x0166*/	MOVQ $0x123456789, AX
-#line 799 "file0.s"
-/*0x0170*/	BYTE $0
-#line 799 "file0.s"
-/*0x0171*/	BYTE $0
-/*      */	PCDATA $1, $247
-#line 799 "file0.s"
-/*0x0172*/	BYTE $0
-#line 799 "file0.s"
-/*0x0173*/	BYTE $0
-#line 799 "file0.s"
-/*0x0174*/	BYTE $0
-#line 655 "file0.s"
-/*0x0175*/	MOVL $0x1234567, AX
-#line 655 "file0.s"
-/*0x017a*/	BYTE $0
-#line 551 "file0.s"
-/*0x017b*/	BYTE $0
-#line 551 "file0.s"
-/*0x017c*/	BYTE $0
-#line 271 "file0.s"
-/*0x017d*/	MOVQ $0x123456789, AX
-#line 271 "file0.s"
-/*0x0187*/	MOVQ $0x123456789, AX
-#line 271 "file0.s"
-/*0x0191*/	MOVL $0x1234567, AX
-#line 271 "file0.s"
-/*0x0196*/	BYTE $0
-#line 271 "file0.s"
-/*0x0197*/	BYTE $0
-#line 271 "file0.s"
-/*0x0198*/	BYTE $0
-#line 233 "file0.s"
-/*0x0199*/	MOVL $0x1234567, AX
-#line 233 "file0.s"
-/*0x019e*/	BYTE $0
-#line 233 "file0.s"
-/*0x019f*/	BYTE $0
-#line 233 "file0.s"
-/*0x01a0*/	BYTE $0
-#line 233 "file0.s"
-/*0x01a1*/	BYTE $0
-#line 738 "file0.s"
-/*0x01a2*/	MOVL $0x1234567, AX
-#line 738 "file0.s"
-/*0x01a7*/	BYTE $0
-#line 800 "file0.s"
-/*0x01a8*/	BYTE $0
-#line 800 "file0.s"
-/*0x01a9*/	BYTE $0
-#line 646 "file0.s"
-/*0x01aa*/	MOVQ $0x123456789, AX
-#line 646 "file0.s"
-/*0x01b4*/	BYTE $0
-#line 646 "file0.s"
-/*0x01b5*/	BYTE $0
-#line 646 "file0.s"
-/*0x01b6*/	BYTE $0
-#line 709 "file0.s"
-/*0x01b7*/	BYTE $0
-#line 709 "file0.s"
-/*0x01b8*/	BYTE $0
-#line 709 "file0.s"
-/*0x01b9*/	BYTE $0
-#line 709 "file0.s"
-/*0x01ba*/	BYTE $0
-#line 296 "file0.s"
-/*0x01bb*/	BYTE $0
-#line 296 "file0.s"
-/*0x01bc*/	BYTE $0
-#line 296 "file0.s"
-/*0x01bd*/	BYTE $0
-#line 71 "file0.s"
-/*0x01be*/	BYTE $0
-#line 71 "file0.s"
-/*0x01bf*/	BYTE $0
-#line 71 "file0.s"
-/*0x01c0*/	BYTE $0
-#line 7 "file2.s"
-/*0x01c1*/	BYTE $0
-#line 747 "file2.s"
-/*0x01c2*/	BYTE $0
-#line 177 "file2.s"
-/*0x01c3*/	MOVQ $0x123456789, AX
-#line 177 "file2.s"
-/*0x01cd*/	MOVQ $0x123456789, AX
-#line 177 "file2.s"
-/*0x01d7*/	MOVL $0x1234567, AX
-#line 177 "file2.s"
-/*0x01dc*/	BYTE $0
-#line 177 "file2.s"
-/*0x01dd*/	BYTE $0
-#line 177 "file2.s"
-/*0x01de*/	BYTE $0
-#line 72 "file2.s"
-/*0x01df*/	BYTE $0
-#line 215 "file2.s"
-/*0x01e0*/	MOVL $0x1234567, AX
-#line 215 "file2.s"
-/*0x01e5*/	BYTE $0
-#line 215 "file2.s"
-/*0x01e6*/	BYTE $0
-#line 215 "file2.s"
-/*0x01e7*/	BYTE $0
-#line 946 "file2.s"
-/*0x01e8*/	BYTE $0
-#line 946 "file2.s"
-/*0x01e9*/	BYTE $0
-#line 946 "file2.s"
-/*0x01ea*/	BYTE $0
-#line 946 "file2.s"
-/*0x01eb*/	BYTE $0
-#line 263 "file2.s"
-/*0x01ec*/	MOVL $0x1234567, AX
-#line 263 "file2.s"
-/*0x01f1*/	BYTE $0
-#line 897 "file2.s"
-/*0x01f2*/	MOVQ $0x123456789, AX
-#line 897 "file2.s"
-/*0x01fc*/	MOVQ $0x123456789, AX
-#line 897 "file2.s"
-/*0x0206*/	BYTE $0
-#line 897 "file2.s"
-/*0x0207*/	BYTE $0
-#line 897 "file2.s"
-/*0x0208*/	BYTE $0
-#line 229 "file2.s"
-/*0x0209*/	BYTE $0
-#line 229 "file2.s"
-/*0x020a*/	BYTE $0
-#line 229 "file2.s"
-/*0x020b*/	BYTE $0
-#line 229 "file2.s"
-/*0x020c*/	BYTE $0
-/*      */	PCDATA $1, $7
-#line 229 "file2.s"
-/*0x020d*/	MOVL $0x1234567, AX
-#line 229 "file2.s"
-/*0x0212*/	BYTE $0
-#line 353 "file2.s"
-/*0x0213*/	BYTE $0
-#line 353 "file2.s"
-/*0x0214*/	BYTE $0
-#line 353 "file2.s"
-/*0x0215*/	BYTE $0
-#line 353 "file2.s"
-/*0x0216*/	BYTE $0
-#line 852 "file2.s"
-/*0x0217*/	BYTE $0
-#line 852 "file2.s"
-/*0x0218*/	BYTE $0
-#line 852 "file2.s"
-/*0x0219*/	BYTE $0
-#line 852 "file2.s"
-/*0x021a*/	BYTE $0
-#line 852 "file2.s"
-/*0x021b*/	PUSHQ AX
-#line 852 "file2.s"
-/*0x021c*/	BYTE $0
-#line 852 "file2.s"
-/*0x021d*/	BYTE $0
-#line 852 "file2.s"
-/*0x021e*/	BYTE $0
-#line 904 "file2.s"
-/*0x021f*/	MOVQ $0x123456789, AX
-#line 904 "file2.s"
-/*0x0229*/	BYTE $0
-#line 904 "file2.s"
-/*0x022a*/	BYTE $0
-#line 882 "file2.s"
-/*0x022b*/	BYTE $0
-#line 905 "file2.s"
-/*0x022c*/	BYTE $0
-#line 410 "file2.s"
-/*0x022d*/	MOVQ $0x123456789, AX
-#line 410 "file2.s"
-/*0x0237*/	BYTE $0
-#line 410 "file2.s"
-/*0x0238*/	BYTE $0
-#line 410 "file2.s"
-/*0x0239*/	POPQ AX
-#line 410 "file2.s"
-/*0x023a*/	BYTE $0
-#line 410 "file2.s"
-/*0x023b*/	BYTE $0
-#line 410 "file2.s"
-/*0x023c*/	BYTE $0
-/*      */	PCDATA $2, $173
-#line 410 "file2.s"
-/*0x023d*/	MOVL $0x1234567, AX
-#line 410 "file2.s"
-/*0x0242*/	BYTE $0
-/*      */	PCDATA $1, $396
-#line 410 "file2.s"
-/*0x0243*/	BYTE $0
-#line 410 "file2.s"
-/*0x0244*/	BYTE $0
-#line 666 "file2.s"
-/*0x0245*/	BYTE $0
-#line 129 "file2.s"
-/*0x0246*/	MOVQ $0x123456789, AX
-#line 129 "file2.s"
-/*0x0250*/	BYTE $0
-#line 391 "file2.s"
-/*0x0251*/	BYTE $0
-#line 696 "file2.s"
-/*0x0252*/	MOVL $0x1234567, AX
-#line 940 "file2.s"
-/*0x0257*/	BYTE $0
-#line 940 "file2.s"
-/*0x0258*/	BYTE $0
-#line 606 "file2.s"
-/*0x0259*/	MOVL $0x1234567, AX
-#line 606 "file2.s"
-/*0x025e*/	BYTE $0
-#line 648 "file2.s"
-/*0x025f*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x0269*/	BYTE $0
-#line 648 "file2.s"
-/*0x026a*/	BYTE $0
-/*      */	PCDATA $2, $84
-#line 648 "file2.s"
-/*0x026b*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x0275*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x027f*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x0289*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x0293*/	MOVQ $0x123456789, AX
-#line 648 "file2.s"
-/*0x029d*/	MOVL $0x1234567, AX
-#line 648 "file2.s"
-/*0x02a2*/	PUSHQ AX
-#line 648 "file2.s"
-/*0x02a3*/	MOVL $0x1234567, AX
-#line 648 "file2.s"
-/*0x02a8*/	BYTE $0
-#line 648 "file2.s"
-/*0x02a9*/	BYTE $0
-#line 648 "file2.s"
-/*0x02aa*/	BYTE $0
-#line 648 "file2.s"
-/*0x02ab*/	BYTE $0
-#line 449 "file2.s"
-/*0x02ac*/	MOVQ $0x123456789, AX
-#line 449 "file2.s"
-/*0x02b6*/	MOVL $0x1234567, AX
-#line 284 "file2.s"
-/*0x02bb*/	BYTE $0
-#line 284 "file2.s"
-/*0x02bc*/	BYTE $0
-#line 284 "file2.s"
-/*0x02bd*/	BYTE $0
-#line 284 "file2.s"
-/*0x02be*/	BYTE $0
-#line 26 "file2.s"
-/*0x02bf*/	MOVQ $0x123456789, AX
-#line 26 "file2.s"
-/*0x02c9*/	MOVL $0x1234567, AX
-#line 26 "file2.s"
-/*0x02ce*/	BYTE $0
-#line 26 "file2.s"
-/*0x02cf*/	BYTE $0
-#line 26 "file2.s"
-/*0x02d0*/	BYTE $0
-#line 605 "file2.s"
-/*0x02d1*/	MOVL $0x1234567, AX
-#line 605 "file2.s"
-/*0x02d6*/	BYTE $0
-#line 605 "file2.s"
-/*0x02d7*/	BYTE $0
-#line 605 "file2.s"
-/*0x02d8*/	BYTE $0
-#line 593 "file2.s"
-/*0x02d9*/	MOVL $0x1234567, AX
-#line 541 "file2.s"
-/*0x02de*/	MOVL $0x1234567, AX
-#line 541 "file2.s"
-/*0x02e3*/	BYTE $0
-#line 541 "file2.s"
-/*0x02e4*/	BYTE $0
-#line 181 "file2.s"
-/*0x02e5*/	MOVQ $0x123456789, AX
-#line 181 "file2.s"
-/*0x02ef*/	BYTE $0
-#line 907 "file2.s"
-/*0x02f0*/	MOVQ $0x123456789, AX
-#line 704 "file2.s"
-/*0x02fa*/	MOVQ $0x123456789, AX
-#line 704 "file2.s"
-/*0x0304*/	MOVQ $0x123456789, AX
-#line 704 "file2.s"
-/*0x030e*/	MOVL $0x1234567, AX
-#line 704 "file2.s"
-/*0x0313*/	BYTE $0
-#line 704 "file2.s"
-/*0x0314*/	BYTE $0
-#line 704 "file2.s"
-/*0x0315*/	BYTE $0
-#line 704 "file2.s"
-/*0x0316*/	BYTE $0
-#line 859 "file2.s"
-/*0x0317*/	MOVL $0x1234567, AX
-#line 407 "file2.s"
-/*0x031c*/	BYTE $0
-#line 407 "file2.s"
-/*0x031d*/	BYTE $0
-/*      */	PCDATA $2, $569
-#line 407 "file2.s"
-/*0x031e*/	MOVL $0x1234567, AX
-#line 407 "file2.s"
-/*0x0323*/	BYTE $0
-#line 407 "file2.s"
-/*0x0324*/	BYTE $0
-#line 407 "file2.s"
-/*0x0325*/	BYTE $0
-/*      */	PCDATA $1, $937
-#line 407 "file2.s"
-/*0x0326*/	MOVL $0x1234567, AX
-#line 407 "file2.s"
-/*0x032b*/	BYTE $0
-#line 774 "file2.s"
-/*0x032c*/	MOVQ $0x123456789, AX
-#line 774 "file2.s"
-/*0x0336*/	BYTE $0
-#line 547 "file2.s"
-/*0x0337*/	BYTE $0
-#line 547 "file2.s"
-/*0x0338*/	BYTE $0
-#line 547 "file2.s"
-/*0x0339*/	BYTE $0
-#line 547 "file2.s"
-/*0x033a*/	PUSHQ AX
-#line 547 "file2.s"
-/*0x033b*/	MOVL $0x1234567, AX
-#line 427 "file2.s"
-/*0x0340*/	MOVL $0x1234567, AX
-/*      */	PCDATA $1, $462
-#line 427 "file2.s"
-/*0x0345*/	MOVQ $0x123456789, AX
-#line 427 "file2.s"
-/*0x034f*/	MOVL $0x1234567, AX
-#line 427 "file2.s"
-/*0x0354*/	BYTE $0
-#line 427 "file2.s"
-/*0x0355*/	BYTE $0
-#line 427 "file2.s"
-/*0x0356*/	BYTE $0
-#line 427 "file2.s"
-/*0x0357*/	BYTE $0
-/*      */	PCDATA $2, $303
-#line 427 "file2.s"
-/*0x0358*/	MOVQ $0x123456789, AX
-#line 427 "file2.s"
-/*0x0362*/	BYTE $0
-#line 427 "file2.s"
-/*0x0363*/	BYTE $0
-#line 708 "file2.s"
-/*0x0364*/	BYTE $0
-#line 708 "file2.s"
-/*0x0365*/	BYTE $0
-#line 708 "file2.s"
-/*0x0366*/	BYTE $0
-#line 708 "file2.s"
-/*0x0367*/	BYTE $0
-#line 218 "file2.s"
-/*0x0368*/	MOVL $0x1234567, AX
-#line 44 "file2.s"
-/*0x036d*/	BYTE $0
-#line 915 "file2.s"
-/*0x036e*/	BYTE $0
-#line 915 "file2.s"
-/*0x036f*/	BYTE $0
-#line 915 "file2.s"
-/*0x0370*/	BYTE $0
-#line 915 "file2.s"
-/*0x0371*/	BYTE $0
-#line 122 "file2.s"
-/*0x0372*/	MOVQ $0x123456789, AX
-#line 122 "file2.s"
-/*0x037c*/	MOVL $0x1234567, AX
-#line 122 "file2.s"
-/*0x0381*/	BYTE $0
-#line 122 "file2.s"
-/*0x0382*/	BYTE $0
-#line 266 "file2.s"
-/*0x0383*/	BYTE $0
-#line 266 "file2.s"
-/*0x0384*/	BYTE $0
-#line 368 "file2.s"
-/*0x0385*/	BYTE $0
-#line 368 "file2.s"
-/*0x0386*/	BYTE $0
-#line 368 "file2.s"
-/*0x0387*/	BYTE $0
-#line 368 "file2.s"
-/*0x0388*/	BYTE $0
-#line 775 "file2.s"
-/*0x0389*/	BYTE $0
-#line 10 "file8.s"
-/*0x038a*/	BYTE $0
-#line 10 "file8.s"
-/*0x038b*/	BYTE $0
-#line 422 "file8.s"
-/*0x038c*/	MOVL $0x1234567, AX
-#line 422 "file8.s"
-/*0x0391*/	BYTE $0
-#line 613 "file8.s"
-/*0x0392*/	BYTE $0
-#line 613 "file8.s"
-/*0x0393*/	BYTE $0
-#line 613 "file8.s"
-/*0x0394*/	BYTE $0
-#line 697 "file8.s"
-/*0x0395*/	MOVQ $0x123456789, AX
-#line 697 "file8.s"
-/*0x039f*/	MOVQ $0x123456789, AX
-#line 697 "file8.s"
-/*0x03a9*/	BYTE $0
-#line 697 "file8.s"
-/*0x03aa*/	BYTE $0
-#line 697 "file8.s"
-/*0x03ab*/	BYTE $0
-	POPQ AX
-	POPQ AX
-	POPQ AX
-	RET
-
-GLOBL funcdata2(SB), $16
-
-TEXT start(SB),7,$0
-	CALL func0(SB)
-	CALL func1(SB)
-	CALL func2(SB)
-	MOVQ $runtime·pclntab(SB), AX
-
-	RET
diff --git a/src/cmd/newlink/util.go b/src/cmd/newlink/util.go
deleted file mode 100644
index b8a6b2c..0000000
--- a/src/cmd/newlink/util.go
+++ /dev/null
@@ -1,11 +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.
-
-package main
-
-// round returns size rounded up to the next multiple of align;
-// align must be a power of two.
-func round(size, align Addr) Addr {
-	return (size + align - 1) &^ (align - 1)
-}
diff --git a/src/cmd/newlink/write.go b/src/cmd/newlink/write.go
deleted file mode 100644
index 7e11b2f..0000000
--- a/src/cmd/newlink/write.go
+++ /dev/null
@@ -1,14 +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.
-
-// Writing of executable and (for hostlink mode) object files.
-
-package main
-
-import "io"
-
-func (p *Prog) write(w io.Writer) {
-	p.Entry = p.Syms[p.startSym].Addr
-	p.formatter.write(w, p)
-}
diff --git a/src/crypto/cipher/example_test.go b/src/crypto/cipher/example_test.go
index 1cfa982..f6cc386 100644
--- a/src/crypto/cipher/example_test.go
+++ b/src/crypto/cipher/example_test.go
@@ -14,6 +14,58 @@ import (
 	"os"
 )
 
+func ExampleNewGCMEncrypter() {
+	// The key argument should be the AES key, either 16 or 32 bytes
+	// to select AES-128 or AES-256.
+	key := []byte("AES256Key-32Characters1234567890")
+	plaintext := []byte("exampleplaintext")
+
+	block, err := aes.NewCipher(key)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	// Never use more than 2^32 random nonces with a given key because of the risk of a repeat.
+	nonce := make([]byte, 12)
+	if _, err := io.ReadFull(rand.Reader, nonce); err != nil {
+		panic(err.Error())
+	}
+
+	aesgcm, err := cipher.NewGCM(block)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	ciphertext := aesgcm.Seal(nil, nonce, plaintext, nil)
+	fmt.Printf("%x\n", ciphertext)
+}
+
+func ExampleNewGCMDecrypter() {
+	// The key argument should be the AES key, either 16 or 32 bytes
+	// to select AES-128 or AES-256.
+	key := []byte("AES256Key-32Characters1234567890")
+	ciphertext, _ := hex.DecodeString("f90fbef747e7212ad7410d0eee2d965de7e890471695cddd2a5bc0ef5da1d04ad8147b62141ad6e4914aee8c512f64fba9037603d41de0d50b718bd665f019cdcd")
+
+	nonce, _ := hex.DecodeString("bb8ef84243d2ee95a41c6c57")
+
+	block, err := aes.NewCipher(key)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	aesgcm, err := cipher.NewGCM(block)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	plaintext, err := aesgcm.Open(nil, nonce, ciphertext, nil)
+	if err != nil {
+		panic(err.Error())
+	}
+
+	fmt.Printf("%s\n", string(plaintext))
+}
+
 func ExampleNewCBCDecrypter() {
 	key := []byte("example key 1234")
 	ciphertext, _ := hex.DecodeString("f363f3ccdcb12bb883abf484ba77d9cd7d32b5baecb3d4b1b3e0e4beffdb3ded")
diff --git a/src/crypto/crypto.go b/src/crypto/crypto.go
index 184ea9d..a80ebd3 100644
--- a/src/crypto/crypto.go
+++ b/src/crypto/crypto.go
@@ -109,7 +109,7 @@ type Signer interface {
 	// private key.
 	Public() PublicKey
 
-	// Sign signs msg with the private key, possibly using entropy from
+	// Sign signs digest with the private key, possibly using entropy from
 	// rand. For an RSA key, the resulting signature should be either a
 	// PKCS#1 v1.5 or PSS signature (as indicated by opts). For an (EC)DSA
 	// key, it should be a DER-serialised, ASN.1 signature structure.
@@ -118,7 +118,11 @@ type Signer interface {
 	// simply pass in the hash function used as opts. Sign may also attempt
 	// to type assert opts to other types in order to obtain algorithm
 	// specific values. See the documentation in each package for details.
-	Sign(rand io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error)
+	//
+	// Note that when a signature of a hash of a larger message is needed,
+	// the caller is responsible for hashing the larger message and passing
+	// the hash (as digest) and the hash function (as opts) to Sign.
+	Sign(rand io.Reader, digest []byte, opts SignerOpts) (signature []byte, err error)
 }
 
 // SignerOpts contains options for signing with a Signer.
diff --git a/src/crypto/rsa/example_test.go b/src/crypto/rsa/example_test.go
new file mode 100644
index 0000000..1435b70
--- /dev/null
+++ b/src/crypto/rsa/example_test.go
@@ -0,0 +1,169 @@
+// Copyright 2016 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 rsa
+
+import (
+	"crypto"
+	"crypto/aes"
+	"crypto/cipher"
+	"crypto/rand"
+	"crypto/sha256"
+	"encoding/hex"
+	"fmt"
+	"io"
+	"os"
+)
+
+// RSA is able to encrypt only a very limited amount of data. In order
+// to encrypt reasonable amounts of data a hybrid scheme is commonly
+// used: RSA is used to encrypt a key for a symmetric primitive like
+// AES-GCM.
+//
+// Before encrypting, data is “padded” by embedding it in a known
+// structure. This is done for a number of reasons, but the most
+// obvious is to ensure that the value is large enough that the
+// exponentiation is larger than the modulus. (Otherwise it could be
+// decrypted with a square-root.)
+//
+// In these designs, when using PKCS#1 v1.5, it's vitally important to
+// avoid disclosing whether the received RSA message was well-formed
+// (that is, whether the result of decrypting is a correctly padded
+// message) because this leaks secret information.
+// DecryptPKCS1v15SessionKey is designed for this situation and copies
+// the decrypted, symmetric key (if well-formed) in constant-time over
+// a buffer that contains a random key. Thus, if the RSA result isn't
+// well-formed, the implementation uses a random key in constant time.
+func ExampleDecryptPKCS1v15SessionKey() {
+	// crypto/rand.Reader is a good source of entropy for blinding the RSA
+	// operation.
+	rng := rand.Reader
+
+	// The hybrid scheme should use at least a 16-byte symmetric key. Here
+	// we read the random key that will be used if the RSA decryption isn't
+	// well-formed.
+	key := make([]byte, 32)
+	if _, err := io.ReadFull(rng, key); err != nil {
+		panic("RNG failure")
+	}
+
+	rsaCiphertext, _ := hex.DecodeString("aabbccddeeff")
+
+	if err := DecryptPKCS1v15SessionKey(rng, rsaPrivateKey, rsaCiphertext, key); err != nil {
+		// Any errors that result will be “public” – meaning that they
+		// can be determined without any secret information. (For
+		// instance, if the length of key is impossible given the RSA
+		// public key.)
+		fmt.Fprintf(os.Stderr, "Error from RSA decryption: %s\n", err)
+		return
+	}
+
+	// Given the resulting key, a symmetric scheme can be used to decrypt a
+	// larger ciphertext.
+	block, err := aes.NewCipher(key)
+	if err != nil {
+		panic("aes.NewCipher failed: " + err.Error())
+	}
+
+	// Since the key is random, using a fixed nonce is acceptable as the
+	// (key, nonce) pair will still be unique, as required.
+	var zeroNonce [12]byte
+	aead, err := cipher.NewGCM(block)
+	if err != nil {
+		panic("cipher.NewGCM failed: " + err.Error())
+	}
+	ciphertext, _ := hex.DecodeString("00112233445566")
+	plaintext, err := aead.Open(nil, zeroNonce[:], ciphertext, nil)
+	if err != nil {
+		// The RSA ciphertext was badly formed; the decryption will
+		// fail here because the AES-GCM key will be incorrect.
+		fmt.Fprintf(os.Stderr, "Error decrypting: %s\n", err)
+		return
+	}
+
+	fmt.Printf("Plaintext: %s\n", string(plaintext))
+}
+
+func ExampleSignPKCS1v15() {
+	// crypto/rand.Reader is a good source of entropy for blinding the RSA
+	// operation.
+	rng := rand.Reader
+
+	message := []byte("message to be signed")
+
+	// Only small messages can be signed directly; thus the hash of a
+	// message, rather than the message itself, is signed. This requires
+	// that the hash function be collision resistant. SHA-256 is the
+	// least-strong hash function that should be used for this at the time
+	// of writing (2016).
+	hashed := sha256.Sum256(message)
+
+	signature, err := SignPKCS1v15(rng, rsaPrivateKey, crypto.SHA256, hashed[:])
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error from signing: %s\n", err)
+		return
+	}
+
+	fmt.Printf("Signature: %x\n", signature)
+}
+
+func ExampleVerifyPKCS1v15() {
+	message := []byte("message to be signed")
+	signature, _ := hex.DecodeString("ad2766728615cc7a746cc553916380ca7bfa4f8983b990913bc69eb0556539a350ff0f8fe65ddfd3ebe91fe1c299c2fac135bc8c61e26be44ee259f2f80c1530")
+
+	// Only small messages can be signed directly; thus the hash of a
+	// message, rather than the message itself, is signed. This requires
+	// that the hash function be collision resistant. SHA-256 is the
+	// least-strong hash function that should be used for this at the time
+	// of writing (2016).
+	hashed := sha256.Sum256(message)
+
+	err := VerifyPKCS1v15(&rsaPrivateKey.PublicKey, crypto.SHA256, hashed[:], signature)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error from verification: %s\n", err)
+		return
+	}
+
+	// signature is a valid signature of message from the public key.
+}
+
+func ExampleEncryptOAEP() {
+	secretMessage := []byte("send reinforcements, we're going to advance")
+	label := []byte("orders")
+
+	// crypto/rand.Reader is a good source of entropy for randomizing the
+	// encryption function.
+	rng := rand.Reader
+
+	ciphertext, err := EncryptOAEP(sha256.New(), rng, &test2048Key.PublicKey, secretMessage, label)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error from encryption: %s\n", err)
+		return
+	}
+
+	// Since encryption is a randomized function, ciphertext will be
+	// different each time.
+	fmt.Printf("Ciphertext: %x\n", ciphertext)
+}
+
+func ExampleDecryptOAEP() {
+	ciphertext, _ := hex.DecodeString("4d1ee10e8f286390258c51a5e80802844c3e6358ad6690b7285218a7c7ed7fc3a4c7b950fbd04d4b0239cc060dcc7065ca6f84c1756deb71ca5685cadbb82be025e16449b905c568a19c088a1abfad54bf7ecc67a7df39943ec511091a34c0f2348d04e058fcff4d55644de3cd1d580791d4524b92f3e91695582e6e340a1c50b6c6d78e80b4e42c5b4d45e479b492de42bbd39cc642ebb80226bb5200020d501b24a37bcc2ec7f34e596b4fd6b063de4858dbf5a4e3dd18e262eda0ec2d19dbd8e890d672b63d368768360b20c0b6b8592a438fa275e5fa7f60bef0dd39673fd3989cc5 [...]
+	label := []byte("orders")
+
+	// crypto/rand.Reader is a good source of entropy for blinding the RSA
+	// operation.
+	rng := rand.Reader
+
+	plaintext, err := DecryptOAEP(sha256.New(), rng, test2048Key, ciphertext, label)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "Error from decryption: %s\n", err)
+		return
+	}
+
+	fmt.Printf("Plaintext: %s\n", string(plaintext))
+
+	// Remember that encryption only provides confidentiality. The
+	// ciphertext should be signed before authenticity is assumed and, even
+	// then, consider that messages might be reordered.
+}
diff --git a/src/crypto/rsa/pkcs1v15.go b/src/crypto/rsa/pkcs1v15.go
index 37eaf1a..5c5f415 100644
--- a/src/crypto/rsa/pkcs1v15.go
+++ b/src/crypto/rsa/pkcs1v15.go
@@ -26,6 +26,10 @@ type PKCS1v15DecryptOptions struct {
 
 // EncryptPKCS1v15 encrypts the given message with RSA and the padding scheme from PKCS#1 v1.5.
 // The message must be no longer than the length of the public modulus minus 11 bytes.
+//
+// The rand parameter is used as a source of entropy to ensure that encrypting
+// the same message twice doesn't result in the same ciphertext.
+//
 // WARNING: use of this function to encrypt plaintexts other than session keys
 // is dangerous. Use RSA OAEP in new protocols.
 func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) (out []byte, err error) {
@@ -59,6 +63,12 @@ func EncryptPKCS1v15(rand io.Reader, pub *PublicKey, msg []byte) (out []byte, er
 
 // DecryptPKCS1v15 decrypts a plaintext using RSA and the padding scheme from PKCS#1 v1.5.
 // If rand != nil, it uses RSA blinding to avoid timing side-channel attacks.
+//
+// Note that whether this function returns an error or not discloses secret
+// information. If an attacker can cause this function to run repeatedly and
+// learn whether each instance returned an error then they can decrypt and
+// forge signatures as if they had the private key. See
+// DecryptPKCS1v15SessionKey for a way of solving this problem.
 func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (out []byte, err error) {
 	if err := checkPub(&priv.PublicKey); err != nil {
 		return nil, err
@@ -87,6 +97,12 @@ func DecryptPKCS1v15(rand io.Reader, priv *PrivateKey, ciphertext []byte) (out [
 // See ``Chosen Ciphertext Attacks Against Protocols Based on the RSA
 // Encryption Standard PKCS #1'', Daniel Bleichenbacher, Advances in Cryptology
 // (Crypto '98).
+//
+// Note that if the session key is too small then it may be possible for an
+// attacker to brute-force it. If they can do that then they can learn whether
+// a random value was used (because it'll be different for the same ciphertext)
+// and thus whether the padding was correct. This defeats the point of this
+// function. Using at least a 16-byte key will protect against this attack.
 func DecryptPKCS1v15SessionKey(rand io.Reader, priv *PrivateKey, ciphertext []byte, key []byte) (err error) {
 	if err := checkPub(&priv.PublicKey); err != nil {
 		return err
@@ -201,6 +217,13 @@ var hashPrefixes = map[crypto.Hash][]byte{
 // Note that hashed must be the result of hashing the input message using the
 // given hash function. If hash is zero, hashed is signed directly. This isn't
 // advisable except for interoperability.
+//
+// If rand is not nil then RSA blinding will be used to avoid timing side-channel attacks.
+//
+// This function is deterministic. Thus, if the set of possible messages is
+// small, an attacker may be able to build a map from messages to signatures
+// and identify the signed messages. As ever, signatures provide authenticity,
+// not confidentiality.
 func SignPKCS1v15(rand io.Reader, priv *PrivateKey, hash crypto.Hash, hashed []byte) (s []byte, err error) {
 	hashLen, prefix, err := pkcs1v15HashInfo(hash, len(hashed))
 	if err != nil {
diff --git a/src/crypto/rsa/rsa.go b/src/crypto/rsa/rsa.go
index 0a3e6ac..ee022b8 100644
--- a/src/crypto/rsa/rsa.go
+++ b/src/crypto/rsa/rsa.go
@@ -3,6 +3,21 @@
 // license that can be found in the LICENSE file.
 
 // Package rsa implements RSA encryption as specified in PKCS#1.
+//
+// RSA is a single, fundamental operation that is used in this package to
+// implement either public-key encryption or public-key signatures.
+//
+// The original specification for encryption and signatures with RSA is PKCS#1
+// and the terms "RSA encryption" and "RSA signatures" by default refer to
+// PKCS#1 version 1.5. However, that specification has flaws and new designs
+// should use version two, usually called by just OAEP and PSS, where
+// possible.
+//
+// Two sets of interfaces are included in this package. When a more abstract
+// interface isn't neccessary, there are functions for encrypting/decrypting
+// with v1.5/OAEP and signing/verifying with v1.5/PSS. If one needs to abstract
+// over the public-key primitive, the PrivateKey struct implements the
+// Decrypter and Signer interfaces from the crypto package.
 package rsa
 
 import (
@@ -317,6 +332,20 @@ func encrypt(c *big.Int, pub *PublicKey, m *big.Int) *big.Int {
 }
 
 // EncryptOAEP encrypts the given message with RSA-OAEP.
+//
+// OAEP is parameterised by a hash function that is used as a random oracle.
+// Encryption and decryption of a given message must use the same hash function
+// and sha256.New() is a reasonable choice.
+//
+// The random parameter is used as a source of entropy to ensure that
+// encrypting the same message twice doesn't result in the same ciphertext.
+//
+// The label parameter may contain arbitrary data that will not be encrypted,
+// but which gives important context to the message. For example, if a given
+// public key is used to decrypt two types of messages then distinct label
+// values could be used to ensure that a ciphertext for one purpose cannot be
+// used for another by an attacker. If not required it can be empty.
+//
 // The message must be no longer than the length of the public modulus less
 // twice the hash length plus 2.
 func EncryptOAEP(hash hash.Hash, random io.Reader, pub *PublicKey, msg []byte, label []byte) (out []byte, err error) {
@@ -522,7 +551,17 @@ func decryptAndCheck(random io.Reader, priv *PrivateKey, c *big.Int) (m *big.Int
 }
 
 // DecryptOAEP decrypts ciphertext using RSA-OAEP.
-// If random != nil, DecryptOAEP uses RSA blinding to avoid timing side-channel attacks.
+
+// OAEP is parameterised by a hash function that is used as a random oracle.
+// Encryption and decryption of a given message must use the same hash function
+// and sha256.New() is a reasonable choice.
+//
+// The random parameter, if not nil, is used to blind the private-key operation
+// and avoid timing side-channel attacks. Blinding is purely internal to this
+// function – the random data need not match that used when encrypting.
+//
+// The label parameter must match the value given when encrypting. See
+// EncryptOAEP for details.
 func DecryptOAEP(hash hash.Hash, random io.Reader, priv *PrivateKey, ciphertext []byte, label []byte) (msg []byte, err error) {
 	if err := checkPub(&priv.PublicKey); err != nil {
 		return nil, err
diff --git a/src/crypto/tls/tls.go b/src/crypto/tls/tls.go
index c1d1331..4bedd76 100644
--- a/src/crypto/tls/tls.go
+++ b/src/crypto/tls/tls.go
@@ -172,7 +172,9 @@ func Dial(network, addr string, config *Config) (*Conn, error) {
 }
 
 // LoadX509KeyPair reads and parses a public/private key pair from a pair of
-// files. The files must contain PEM encoded data.
+// files. The files must contain PEM encoded data. On successful return,
+// Certificate.Leaf will be nil because the parsed form of the certificate is
+// not retained.
 func LoadX509KeyPair(certFile, keyFile string) (Certificate, error) {
 	certPEMBlock, err := ioutil.ReadFile(certFile)
 	if err != nil {
@@ -186,7 +188,8 @@ func LoadX509KeyPair(certFile, keyFile string) (Certificate, error) {
 }
 
 // X509KeyPair parses a public/private key pair from a pair of
-// PEM encoded data.
+// PEM encoded data. On successful return, Certificate.Leaf will be nil because
+// the parsed form of the certificate is not retained.
 func X509KeyPair(certPEMBlock, keyPEMBlock []byte) (Certificate, error) {
 	fail := func(err error) (Certificate, error) { return Certificate{}, err }
 
diff --git a/src/database/sql/convert.go b/src/database/sql/convert.go
index bba5a88..740fd9d 100644
--- a/src/database/sql/convert.go
+++ b/src/database/sql/convert.go
@@ -12,6 +12,7 @@ import (
 	"fmt"
 	"reflect"
 	"strconv"
+	"time"
 )
 
 var errNilPtr = errors.New("destination pointer is nil") // embedded in descriptive error
@@ -127,6 +128,18 @@ func convertAssign(dest, src interface{}) error {
 			*d = s
 			return nil
 		}
+	case time.Time:
+		switch d := dest.(type) {
+		case *string:
+			*d = s.Format(time.RFC3339Nano)
+			return nil
+		case *[]byte:
+			if d == nil {
+				return errNilPtr
+			}
+			*d = []byte(s.Format(time.RFC3339Nano))
+			return nil
+		}
 	case nil:
 		switch d := dest.(type) {
 		case *interface{}:
@@ -226,7 +239,8 @@ func convertAssign(dest, src interface{}) error {
 		s := asString(src)
 		i64, err := strconv.ParseInt(s, 10, dv.Type().Bits())
 		if err != nil {
-			return fmt.Errorf("converting string %q to a %s: %v", s, dv.Kind(), err)
+			err = strconvErr(err)
+			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err)
 		}
 		dv.SetInt(i64)
 		return nil
@@ -234,7 +248,8 @@ func convertAssign(dest, src interface{}) error {
 		s := asString(src)
 		u64, err := strconv.ParseUint(s, 10, dv.Type().Bits())
 		if err != nil {
-			return fmt.Errorf("converting string %q to a %s: %v", s, dv.Kind(), err)
+			err = strconvErr(err)
+			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err)
 		}
 		dv.SetUint(u64)
 		return nil
@@ -242,13 +257,21 @@ func convertAssign(dest, src interface{}) error {
 		s := asString(src)
 		f64, err := strconv.ParseFloat(s, dv.Type().Bits())
 		if err != nil {
-			return fmt.Errorf("converting string %q to a %s: %v", s, dv.Kind(), err)
+			err = strconvErr(err)
+			return fmt.Errorf("converting driver.Value type %T (%q) to a %s: %v", src, s, dv.Kind(), err)
 		}
 		dv.SetFloat(f64)
 		return nil
 	}
 
-	return fmt.Errorf("unsupported driver -> Scan pair: %T -> %T", src, dest)
+	return fmt.Errorf("unsupported Scan, storing driver.Value type %T into type %T", src, dest)
+}
+
+func strconvErr(err error) error {
+	if ne, ok := err.(*strconv.NumError); ok {
+		return ne.Err
+	}
+	return err
 }
 
 func cloneBytes(b []byte) []byte {
diff --git a/src/database/sql/convert_test.go b/src/database/sql/convert_test.go
index 1fab282..342875e 100644
--- a/src/database/sql/convert_test.go
+++ b/src/database/sql/convert_test.go
@@ -77,6 +77,14 @@ var conversionTests = []conversionTest{
 	{s: uint64(123), d: &scanstr, wantstr: "123"},
 	{s: 1.5, d: &scanstr, wantstr: "1.5"},
 
+	// From time.Time:
+	{s: time.Unix(1, 0).UTC(), d: &scanstr, wantstr: "1970-01-01T00:00:01Z"},
+	{s: time.Unix(1453874597, 0).In(time.FixedZone("here", -3600*8)), d: &scanstr, wantstr: "2016-01-26T22:03:17-08:00"},
+	{s: time.Unix(1, 2).UTC(), d: &scanstr, wantstr: "1970-01-01T00:00:01.000000002Z"},
+	{s: time.Time{}, d: &scanstr, wantstr: "0001-01-01T00:00:00Z"},
+	{s: time.Unix(1, 2).UTC(), d: &scanbytes, wantbytes: []byte("1970-01-01T00:00:01.000000002Z")},
+	{s: time.Unix(1, 2).UTC(), d: &scaniface, wantiface: time.Unix(1, 2).UTC()},
+
 	// To []byte
 	{s: nil, d: &scanbytes, wantbytes: nil},
 	{s: "string", d: &scanbytes, wantbytes: []byte("string")},
@@ -104,10 +112,16 @@ var conversionTests = []conversionTest{
 
 	// Strings to integers
 	{s: "255", d: &scanuint8, wantuint: 255},
-	{s: "256", d: &scanuint8, wanterr: `converting string "256" to a uint8: strconv.ParseUint: parsing "256": value out of range`},
+	{s: "256", d: &scanuint8, wanterr: "converting driver.Value type string (\"256\") to a uint8: value out of range"},
 	{s: "256", d: &scanuint16, wantuint: 256},
 	{s: "-1", d: &scanint, wantint: -1},
-	{s: "foo", d: &scanint, wanterr: `converting string "foo" to a int: strconv.ParseInt: parsing "foo": invalid syntax`},
+	{s: "foo", d: &scanint, wanterr: "converting driver.Value type string (\"foo\") to a int: invalid syntax"},
+
+	// int64 to smaller integers
+	{s: int64(5), d: &scanuint8, wantuint: 5},
+	{s: int64(256), d: &scanuint8, wanterr: "converting driver.Value type int64 (\"256\") to a uint8: value out of range"},
+	{s: int64(256), d: &scanuint16, wantuint: 256},
+	{s: int64(65536), d: &scanuint16, wanterr: "converting driver.Value type int64 (\"65536\") to a uint16: value out of range"},
 
 	// True bools
 	{s: true, d: &scanbool, wantbool: true},
@@ -155,7 +169,10 @@ var conversionTests = []conversionTest{
 	{s: 1.5, d: new(userDefined), wantusrdef: 1.5},
 	{s: int64(123), d: new(userDefined), wantusrdef: 123},
 	{s: "1.5", d: new(userDefined), wantusrdef: 1.5},
-	{s: []byte{1, 2, 3}, d: new(userDefinedSlice), wanterr: `unsupported driver -> Scan pair: []uint8 -> *sql.userDefinedSlice`},
+	{s: []byte{1, 2, 3}, d: new(userDefinedSlice), wanterr: `unsupported Scan, storing driver.Value type []uint8 into type *sql.userDefinedSlice`},
+
+	// Other errors
+	{s: complex(1, 2), d: &scanstr, wanterr: `unsupported Scan, storing driver.Value type complex128 into type *string`},
 }
 
 func intPtrValue(intptr interface{}) interface{} {
diff --git a/src/database/sql/sql.go b/src/database/sql/sql.go
index b5a17f0..d8e7cb7 100644
--- a/src/database/sql/sql.go
+++ b/src/database/sql/sql.go
@@ -189,8 +189,7 @@ func (n NullBool) Value() (driver.Value, error) {
 type Scanner interface {
 	// Scan assigns a value from a database driver.
 	//
-	// The src value will be of one of the following restricted
-	// set of types:
+	// The src value will be of one of the following types:
 	//
 	//    int64
 	//    float64
@@ -1786,17 +1785,56 @@ func (rs *Rows) Columns() ([]string, error) {
 }
 
 // Scan copies the columns in the current row into the values pointed
-// at by dest.
+// at by dest. The number of values in dest must be the same as the
+// number of columns in Rows.
 //
-// If an argument has type *[]byte, Scan saves in that argument a copy
-// of the corresponding data. The copy is owned by the caller and can
-// be modified and held indefinitely. The copy can be avoided by using
-// an argument of type *RawBytes instead; see the documentation for
-// RawBytes for restrictions on its use.
+// Scan converts columns read from the database into the following
+// common Go types and special types provided by the sql package:
+//
+//    *string
+//    *[]byte
+//    *int, *int8, *int16, *int32, *int64
+//    *uint, *uint8, *uint16, *uint32, *uint64
+//    *bool
+//    *float32, *float64
+//    *interface{}
+//    *RawBytes
+//    any type implementing Scanner (see Scanner docs)
+//
+// In the most simple case, if the type of the value from the source
+// column is an integer, bool or string type T and dest is of type *T,
+// Scan simply assigns the value through the pointer.
+//
+// Scan also converts between string and numeric types, as long as no
+// information would be lost. While Scan stringifies all numbers
+// scanned from numeric database columns into *string, scans into
+// numeric types are checked for overflow. For example, a float64 with
+// value 300 or a string with value "300" can scan into a uint16, but
+// not into a uint8, though float64(255) or "255" can scan into a
+// uint8. One exception is that scans of some float64 numbers to
+// strings may lose information when stringifying. In general, scan
+// floating point columns into *float64.
+//
+// If a dest argument has type *[]byte, Scan saves in that argument a
+// copy of the corresponding data. The copy is owned by the caller and
+// can be modified and held indefinitely. The copy can be avoided by
+// using an argument of type *RawBytes instead; see the documentation
+// for RawBytes for restrictions on its use.
 //
 // If an argument has type *interface{}, Scan copies the value
-// provided by the underlying driver without conversion. If the value
-// is of type []byte, a copy is made and the caller owns the result.
+// provided by the underlying driver without conversion. When scanning
+// from a source value of type []byte to *interface{}, a copy of the
+// slice is made and the caller owns the result.
+//
+// Source values of type time.Time may be scanned into values of type
+// *time.Time, *interface{}, *string, or *[]byte. When converting to
+// the latter two, time.Format3339Nano is used.
+//
+// Source values of type bool may be scanned into types *bool,
+// *interface{}, *string, *[]byte, or *RawBytes.
+//
+// For scanning into *bool, the source may be true, false, 1, 0, or
+// string inputs parseable by strconv.ParseBool.
 func (rs *Rows) Scan(dest ...interface{}) error {
 	if rs.closed {
 		return errors.New("sql: Rows are closed")
@@ -1845,8 +1883,9 @@ type Row struct {
 }
 
 // Scan copies the columns from the matched row into the values
-// pointed at by dest.  If more than one row matches the query,
-// Scan uses the first row and discards the rest.  If no row matches
+// pointed at by dest. See the documentation on Rows.Scan for details.
+// If more than one row matches the query,
+// Scan uses the first row and discards the rest. If no row matches
 // the query, Scan returns ErrNoRows.
 func (r *Row) Scan(dest ...interface{}) error {
 	if r.err != nil {
diff --git a/src/debug/dwarf/testdata/cycle.c b/src/debug/dwarf/testdata/cycle.c
new file mode 100644
index 0000000..a0b53df
--- /dev/null
+++ b/src/debug/dwarf/testdata/cycle.c
@@ -0,0 +1,7 @@
+typedef struct aaa *AAA;
+typedef AAA BBB;
+struct aaa { BBB val; };
+
+AAA x(void) {
+    return (AAA)0;
+}
diff --git a/src/debug/dwarf/testdata/cycle.elf b/src/debug/dwarf/testdata/cycle.elf
new file mode 100644
index 0000000..e0b66ca
Binary files /dev/null and b/src/debug/dwarf/testdata/cycle.elf differ
diff --git a/src/debug/dwarf/type.go b/src/debug/dwarf/type.go
index a5daa1d..c76a472 100644
--- a/src/debug/dwarf/type.go
+++ b/src/debug/dwarf/type.go
@@ -275,12 +275,14 @@ type typeReader interface {
 
 // Type reads the type at off in the DWARF ``info'' section.
 func (d *Data) Type(off Offset) (Type, error) {
-	return d.readType("info", d.Reader(), off, d.typeCache)
+	return d.readType("info", d.Reader(), off, d.typeCache, nil)
 }
 
-// readType reads a type from r at off of name using and updating a
-// type cache.
-func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Offset]Type) (Type, error) {
+// readType reads a type from r at off of name. It adds types to the
+// type cache, appends new typedef types to typedefs, and computes the
+// sizes of types. Callers should pass nil for typedefs; this is used
+// for internal recursion.
+func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Offset]Type, typedefs *[]*TypedefType) (Type, error) {
 	if t, ok := typeCache[off]; ok {
 		return t, nil
 	}
@@ -294,9 +296,24 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off
 		return nil, DecodeError{name, off, "no type at offset"}
 	}
 
+	// If this is the root of the recursion, prepare to resolve
+	// typedef sizes once the recursion is done. This must be done
+	// after the type graph is constructed because it may need to
+	// resolve cycles in a different order than readType
+	// encounters them.
+	if typedefs == nil {
+		var typedefList []*TypedefType
+		defer func() {
+			for _, t := range typedefList {
+				t.Common().ByteSize = t.Type.Size()
+			}
+		}()
+		typedefs = &typedefList
+	}
+
 	// Parse type from Entry.
 	// Must always set typeCache[off] before calling
-	// d.Type recursively, to handle circular types correctly.
+	// d.readType recursively, to handle circular types correctly.
 	var typ Type
 
 	nextDepth := 0
@@ -345,7 +362,7 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off
 		var t Type
 		switch toff := tval.(type) {
 		case Offset:
-			if t, err = d.readType(name, r.clone(), toff, typeCache); err != nil {
+			if t, err = d.readType(name, r.clone(), toff, typeCache, typedefs); err != nil {
 				return nil
 			}
 		case uint64:
@@ -674,7 +691,10 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off
 			b = -1
 			switch t := typ.(type) {
 			case *TypedefType:
-				b = t.Type.Size()
+				// Record that we need to resolve this
+				// type's size once the type graph is
+				// constructed.
+				*typedefs = append(*typedefs, t)
 			case *PtrType:
 				b = int64(addressSize)
 			}
diff --git a/src/debug/dwarf/type_test.go b/src/debug/dwarf/type_test.go
index 2cb85e7..ad6308d 100644
--- a/src/debug/dwarf/type_test.go
+++ b/src/debug/dwarf/type_test.go
@@ -120,3 +120,37 @@ func testTypedefs(t *testing.T, d *Data, kind string) {
 		}
 	}
 }
+
+func TestTypedefCycle(t *testing.T) {
+	// See issue #13039: reading a typedef cycle starting from a
+	// different place than the size needed to be computed from
+	// used to crash.
+	//
+	// cycle.elf built with GCC 4.8.4:
+	//    gcc -g -c -o cycle.elf cycle.c
+	d := elfData(t, "testdata/cycle.elf")
+	r := d.Reader()
+	offsets := []Offset{}
+	for {
+		e, err := r.Next()
+		if err != nil {
+			t.Fatal("r.Next:", err)
+		}
+		if e == nil {
+			break
+		}
+		switch e.Tag {
+		case TagBaseType, TagTypedef, TagPointerType, TagStructType:
+			offsets = append(offsets, e.Offset)
+		}
+	}
+
+	// Parse each type with a fresh type cache.
+	for _, offset := range offsets {
+		d := elfData(t, "testdata/cycle.elf")
+		_, err := d.Type(offset)
+		if err != nil {
+			t.Fatalf("d.Type(0x%x): %s", offset, err)
+		}
+	}
+}
diff --git a/src/debug/dwarf/typeunit.go b/src/debug/dwarf/typeunit.go
index 9cfb4a8..0f4e07e 100644
--- a/src/debug/dwarf/typeunit.go
+++ b/src/debug/dwarf/typeunit.go
@@ -101,7 +101,7 @@ func (d *Data) sigToType(sig uint64) (Type, error) {
 
 	b := makeBuf(d, tu, tu.name, tu.off, tu.data)
 	r := &typeUnitReader{d: d, tu: tu, b: b}
-	t, err := d.readType(tu.name, r, Offset(tu.toff), make(map[Offset]Type))
+	t, err := d.readType(tu.name, r, Offset(tu.toff), make(map[Offset]Type), nil)
 	if err != nil {
 		return nil, err
 	}
diff --git a/src/encoding/xml/xml.go b/src/encoding/xml/xml.go
index 70ff877..45f4157 100644
--- a/src/encoding/xml/xml.go
+++ b/src/encoding/xml/xml.go
@@ -227,7 +227,8 @@ func NewDecoder(r io.Reader) *Decoder {
 //
 // Token guarantees that the StartElement and EndElement
 // tokens it returns are properly nested and matched:
-// if Token encounters an unexpected end element,
+// if Token encounters an unexpected end element
+// or EOF before all expected end elements,
 // it will return an error.
 //
 // Token implements XML name spaces as described by
diff --git a/src/go/build/build.go b/src/go/build/build.go
index 9539413..c1b70bc 100644
--- a/src/go/build/build.go
+++ b/src/go/build/build.go
@@ -583,7 +583,7 @@ func (ctxt *Context) Import(path string, srcDir string, mode ImportMode) (*Packa
 					vendor := ctxt.joinPath(root, sub, "vendor")
 					if ctxt.isDir(vendor) {
 						dir := ctxt.joinPath(vendor, path)
-						if ctxt.isDir(dir) {
+						if ctxt.isDir(dir) && hasGoFiles(ctxt, dir) {
 							p.Dir = dir
 							p.ImportPath = strings.TrimPrefix(pathpkg.Join(sub, "vendor", path), "src/")
 							p.Goroot = isGoroot
@@ -884,6 +884,20 @@ Found:
 	return p, pkgerr
 }
 
+// hasGoFiles reports whether dir contains any files with names ending in .go.
+// For a vendor check we must exclude directories that contain no .go files.
+// Otherwise it is not possible to vendor just a/b/c and still import the
+// non-vendored a/b. See golang.org/issue/13832.
+func hasGoFiles(ctxt *Context, dir string) bool {
+	ents, _ := ctxt.readDir(dir)
+	for _, ent := range ents {
+		if !ent.IsDir() && strings.HasSuffix(ent.Name(), ".go") {
+			return true
+		}
+	}
+	return false
+}
+
 func findImportComment(data []byte) (s string, line int) {
 	// expect keyword package
 	word, data := parseWord(data)
diff --git a/src/go/build/build_test.go b/src/go/build/build_test.go
index f703897..7312af0 100644
--- a/src/go/build/build_test.go
+++ b/src/go/build/build_test.go
@@ -300,6 +300,7 @@ func TestShellSafety(t *testing.T) {
 }
 
 func TestImportVendor(t *testing.T) {
+	t.Skip("skipping; hpack has moved to internal for now; golang.org/issue/14047")
 	testenv.MustHaveGoBuild(t) // really must just have source
 	ctxt := Default
 	ctxt.GOPATH = ""
@@ -327,3 +328,21 @@ func TestImportVendorFailure(t *testing.T) {
 		t.Fatalf("error on failed import does not mention GOROOT/src/vendor directory:\n%s", e)
 	}
 }
+
+func TestImportVendorParentFailure(t *testing.T) {
+	testenv.MustHaveGoBuild(t) // really must just have source
+	ctxt := Default
+	ctxt.GOPATH = ""
+	// This import should fail because the vendor/golang.org/x/net/http2 directory has no source code.
+	p, err := ctxt.Import("golang.org/x/net/http2", filepath.Join(ctxt.GOROOT, "src/net/http"), 0)
+	if err == nil {
+		t.Fatalf("found empty parent in %s", p.Dir)
+	}
+	if p != nil && p.Dir != "" {
+		t.Fatalf("decided to use %s", p.Dir)
+	}
+	e := err.Error()
+	if !strings.Contains(e, " (vendor tree)") {
+		t.Fatalf("error on failed import does not mention GOROOT/src/vendor directory:\n%s", e)
+	}
+}
diff --git a/src/go/build/deps_test.go b/src/go/build/deps_test.go
index 4603102..376931e 100644
--- a/src/go/build/deps_test.go
+++ b/src/go/build/deps_test.go
@@ -358,7 +358,7 @@ var pkgDeps = map[string][]string{
 		"L4", "NET", "OS",
 		"compress/gzip", "crypto/tls", "mime/multipart", "runtime/debug",
 		"net/http/internal",
-		"golang.org/x/net/http2/hpack",
+		"internal/golang.org/x/net/http2/hpack",
 	},
 	"net/http/internal": {"L4"},
 
diff --git a/src/vendor/golang.org/x/net/http2/hpack/encode.go b/src/internal/golang.org/x/net/http2/hpack/encode.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/encode.go
rename to src/internal/golang.org/x/net/http2/hpack/encode.go
diff --git a/src/vendor/golang.org/x/net/http2/hpack/encode_test.go b/src/internal/golang.org/x/net/http2/hpack/encode_test.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/encode_test.go
rename to src/internal/golang.org/x/net/http2/hpack/encode_test.go
diff --git a/src/vendor/golang.org/x/net/http2/hpack/hpack.go b/src/internal/golang.org/x/net/http2/hpack/hpack.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/hpack.go
rename to src/internal/golang.org/x/net/http2/hpack/hpack.go
diff --git a/src/vendor/golang.org/x/net/http2/hpack/hpack_test.go b/src/internal/golang.org/x/net/http2/hpack/hpack_test.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/hpack_test.go
rename to src/internal/golang.org/x/net/http2/hpack/hpack_test.go
diff --git a/src/vendor/golang.org/x/net/http2/hpack/huffman.go b/src/internal/golang.org/x/net/http2/hpack/huffman.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/huffman.go
rename to src/internal/golang.org/x/net/http2/hpack/huffman.go
diff --git a/src/vendor/golang.org/x/net/http2/hpack/tables.go b/src/internal/golang.org/x/net/http2/hpack/tables.go
similarity index 100%
rename from src/vendor/golang.org/x/net/http2/hpack/tables.go
rename to src/internal/golang.org/x/net/http2/hpack/tables.go
diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go
index 5ef02a1..934f25b 100644
--- a/src/net/dnsclient_unix_test.go
+++ b/src/net/dnsclient_unix_test.go
@@ -80,7 +80,7 @@ func TestSpecialDomainName(t *testing.T) {
 
 	server := "8.8.8.8:53"
 	for _, tt := range specialDomainNameTests {
-		msg, err := exchange(server, tt.name, tt.qtype, 0)
+		msg, err := exchange(server, tt.name, tt.qtype, 3*time.Second)
 		if err != nil {
 			t.Error(err)
 			continue
diff --git a/src/net/http/client.go b/src/net/http/client.go
index faac5d4..3106d22 100644
--- a/src/net/http/client.go
+++ b/src/net/http/client.go
@@ -445,6 +445,7 @@ func (c *Client) doFollowingRedirects(ireq *Request, shouldRedirect func(int) bo
 	for redirect := 0; ; redirect++ {
 		if redirect != 0 {
 			nreq := new(Request)
+			nreq.Cancel = ireq.Cancel
 			nreq.Method = ireq.Method
 			if ireq.Method == "POST" || ireq.Method == "PUT" {
 				nreq.Method = "GET"
diff --git a/src/net/http/client_test.go b/src/net/http/client_test.go
index cfad71e..8939dc8 100644
--- a/src/net/http/client_test.go
+++ b/src/net/http/client_test.go
@@ -240,7 +240,9 @@ func TestClientRedirects(t *testing.T) {
 
 	var checkErr error
 	var lastVia []*Request
-	c = &Client{CheckRedirect: func(_ *Request, via []*Request) error {
+	var lastReq *Request
+	c = &Client{CheckRedirect: func(req *Request, via []*Request) error {
+		lastReq = req
 		lastVia = via
 		return checkErr
 	}}
@@ -260,6 +262,20 @@ func TestClientRedirects(t *testing.T) {
 		t.Errorf("expected lastVia to have contained %d elements; got %d", e, g)
 	}
 
+	// Test that Request.Cancel is propagated between requests (Issue 14053)
+	creq, _ := NewRequest("HEAD", ts.URL, nil)
+	cancel := make(chan struct{})
+	creq.Cancel = cancel
+	if _, err := c.Do(creq); err != nil {
+		t.Fatal(err)
+	}
+	if lastReq == nil {
+		t.Fatal("didn't see redirect")
+	}
+	if lastReq.Cancel != cancel {
+		t.Errorf("expected lastReq to have the cancel channel set on the inital req")
+	}
+
 	checkErr = errors.New("no redirects allowed")
 	res, err = c.Get(ts.URL)
 	if urlError, ok := err.(*url.Error); !ok || urlError.Err != checkErr {
diff --git a/src/net/http/clientserver_test.go b/src/net/http/clientserver_test.go
index 1a9ce5a..9b581e7 100644
--- a/src/net/http/clientserver_test.go
+++ b/src/net/http/clientserver_test.go
@@ -14,15 +14,19 @@ import (
 	"io"
 	"io/ioutil"
 	"log"
+	"net"
 	. "net/http"
 	"net/http/httptest"
 	"net/url"
 	"os"
 	"reflect"
+	"runtime"
 	"sort"
 	"strings"
 	"sync"
+	"sync/atomic"
 	"testing"
+	"time"
 )
 
 type clientServerTest struct {
@@ -44,7 +48,7 @@ const (
 	h2Mode = true
 )
 
-func newClientServerTest(t *testing.T, h2 bool, h Handler) *clientServerTest {
+func newClientServerTest(t *testing.T, h2 bool, h Handler, opts ...interface{}) *clientServerTest {
 	cst := &clientServerTest{
 		t:  t,
 		h2: h2,
@@ -52,6 +56,16 @@ func newClientServerTest(t *testing.T, h2 bool, h Handler) *clientServerTest {
 		tr: &Transport{},
 	}
 	cst.c = &Client{Transport: cst.tr}
+
+	for _, opt := range opts {
+		switch opt := opt.(type) {
+		case func(*Transport):
+			opt(cst.tr)
+		default:
+			t.Fatalf("unhandled option type %T", opt)
+		}
+	}
+
 	if !h2 {
 		cst.ts = httptest.NewServer(h)
 		return cst
@@ -136,6 +150,7 @@ type h12Compare struct {
 	Handler       func(ResponseWriter, *Request)    // required
 	ReqFunc       reqFunc                           // optional
 	CheckResponse func(proto string, res *Response) // optional
+	Opts          []interface{}
 }
 
 func (tt h12Compare) reqFunc() reqFunc {
@@ -146,9 +161,9 @@ func (tt h12Compare) reqFunc() reqFunc {
 }
 
 func (tt h12Compare) run(t *testing.T) {
-	cst1 := newClientServerTest(t, false, HandlerFunc(tt.Handler))
+	cst1 := newClientServerTest(t, false, HandlerFunc(tt.Handler), tt.Opts...)
 	defer cst1.close()
-	cst2 := newClientServerTest(t, true, HandlerFunc(tt.Handler))
+	cst2 := newClientServerTest(t, true, HandlerFunc(tt.Handler), tt.Opts...)
 	defer cst2.close()
 
 	res1, err := tt.reqFunc()(cst1.c, cst1.ts.URL)
@@ -377,6 +392,20 @@ func TestH12_AutoGzip(t *testing.T) {
 	}.run(t)
 }
 
+func TestH12_AutoGzip_Disabled(t *testing.T) {
+	h12Compare{
+		Opts: []interface{}{
+			func(tr *Transport) { tr.DisableCompression = true },
+		},
+		Handler: func(w ResponseWriter, r *Request) {
+			fmt.Fprintf(w, "%q", r.Header["Accept-Encoding"])
+			if ae := r.Header.Get("Accept-Encoding"); ae != "" {
+				t.Errorf("%s Accept-Encoding = %q; want empty", r.Proto, ae)
+			}
+		},
+	}.run(t)
+}
+
 // Test304Responses verifies that 304s don't declare that they're
 // chunking in their response headers and aren't allowed to produce
 // output.
@@ -418,6 +447,35 @@ func TestH12_ServerEmptyContentLength(t *testing.T) {
 	}.run(t)
 }
 
+func TestH12_RequestContentLength_Known_NonZero(t *testing.T) {
+	h12requestContentLength(t, func() io.Reader { return strings.NewReader("FOUR") }, 4)
+}
+
+func TestH12_RequestContentLength_Known_Zero(t *testing.T) {
+	h12requestContentLength(t, func() io.Reader { return strings.NewReader("") }, 0)
+}
+
+func TestH12_RequestContentLength_Unknown(t *testing.T) {
+	h12requestContentLength(t, func() io.Reader { return struct{ io.Reader }{strings.NewReader("Stuff")} }, -1)
+}
+
+func h12requestContentLength(t *testing.T, bodyfn func() io.Reader, wantLen int64) {
+	h12Compare{
+		Handler: func(w ResponseWriter, r *Request) {
+			w.Header().Set("Got-Length", fmt.Sprint(r.ContentLength))
+			fmt.Fprintf(w, "Req.ContentLength=%v", r.ContentLength)
+		},
+		ReqFunc: func(c *Client, url string) (*Response, error) {
+			return c.Post(url, "text/plain", bodyfn())
+		},
+		CheckResponse: func(proto string, res *Response) {
+			if got, want := res.Header.Get("Got-Length"), fmt.Sprint(wantLen); got != want {
+				t.Errorf("Proto %q got length %q; want %q", proto, got, want)
+			}
+		},
+	}.run(t)
+}
+
 // Tests that closing the Request.Cancel channel also while still
 // reading the response body. Issue 13159.
 func TestCancelRequestMidBody_h1(t *testing.T) { testCancelRequestMidBody(t, h1Mode) }
@@ -861,3 +919,134 @@ func testStarRequest(t *testing.T, method string, h2 bool) {
 		t.Errorf("RequestURI = %q; want *", req.RequestURI)
 	}
 }
+
+// Issue 13957
+func TestTransportDiscardsUnneededConns(t *testing.T) {
+	defer afterTest(t)
+	cst := newClientServerTest(t, h2Mode, HandlerFunc(func(w ResponseWriter, r *Request) {
+		fmt.Fprintf(w, "Hello, %v", r.RemoteAddr)
+	}))
+	defer cst.close()
+
+	var numOpen, numClose int32 // atomic
+
+	tlsConfig := &tls.Config{InsecureSkipVerify: true}
+	tr := &Transport{
+		TLSClientConfig: tlsConfig,
+		DialTLS: func(_, addr string) (net.Conn, error) {
+			time.Sleep(10 * time.Millisecond)
+			rc, err := net.Dial("tcp", addr)
+			if err != nil {
+				return nil, err
+			}
+			atomic.AddInt32(&numOpen, 1)
+			c := noteCloseConn{rc, func() { atomic.AddInt32(&numClose, 1) }}
+			return tls.Client(c, tlsConfig), nil
+		},
+	}
+	if err := ExportHttp2ConfigureTransport(tr); err != nil {
+		t.Fatal(err)
+	}
+	defer tr.CloseIdleConnections()
+
+	c := &Client{Transport: tr}
+
+	const N = 10
+	gotBody := make(chan string, N)
+	var wg sync.WaitGroup
+	for i := 0; i < N; i++ {
+		wg.Add(1)
+		go func() {
+			defer wg.Done()
+			resp, err := c.Get(cst.ts.URL)
+			if err != nil {
+				t.Errorf("Get: %v", err)
+				return
+			}
+			defer resp.Body.Close()
+			slurp, err := ioutil.ReadAll(resp.Body)
+			if err != nil {
+				t.Error(err)
+			}
+			gotBody <- string(slurp)
+		}()
+	}
+	wg.Wait()
+	close(gotBody)
+
+	var last string
+	for got := range gotBody {
+		if last == "" {
+			last = got
+			continue
+		}
+		if got != last {
+			t.Errorf("Response body changed: %q -> %q", last, got)
+		}
+	}
+
+	var open, close int32
+	for i := 0; i < 150; i++ {
+		open, close = atomic.LoadInt32(&numOpen), atomic.LoadInt32(&numClose)
+		if open < 1 {
+			t.Fatalf("open = %d; want at least", open)
+		}
+		if close == open-1 {
+			// Success
+			return
+		}
+		time.Sleep(10 * time.Millisecond)
+	}
+	t.Errorf("%d connections opened, %d closed; want %d to close", open, close, open-1)
+}
+
+// tests that Transport doesn't retain a pointer to the provided request.
+func TestTransportGCRequest_h1(t *testing.T) { testTransportGCRequest(t, h1Mode) }
+func TestTransportGCRequest_h2(t *testing.T) { testTransportGCRequest(t, h2Mode) }
+func testTransportGCRequest(t *testing.T, h2 bool) {
+	defer afterTest(t)
+	cst := newClientServerTest(t, h2, HandlerFunc(func(w ResponseWriter, r *Request) {
+		ioutil.ReadAll(r.Body)
+		io.WriteString(w, "Hello.")
+	}))
+	defer cst.close()
+
+	didGC := make(chan struct{})
+	(func() {
+		body := strings.NewReader("some body")
+		req, _ := NewRequest("POST", cst.ts.URL, body)
+		runtime.SetFinalizer(req, func(*Request) { close(didGC) })
+		res, err := cst.c.Do(req)
+		if err != nil {
+			t.Fatal(err)
+		}
+		if _, err := ioutil.ReadAll(res.Body); err != nil {
+			t.Fatal(err)
+		}
+		if err := res.Body.Close(); err != nil {
+			t.Fatal(err)
+		}
+	})()
+	timeout := time.NewTimer(5 * time.Second)
+	defer timeout.Stop()
+	for {
+		select {
+		case <-didGC:
+			return
+		case <-time.After(100 * time.Millisecond):
+			runtime.GC()
+		case <-timeout.C:
+			t.Fatal("never saw GC of request")
+		}
+	}
+}
+
+type noteCloseConn struct {
+	net.Conn
+	closeFunc func()
+}
+
+func (x noteCloseConn) Close() error {
+	x.closeFunc()
+	return x.Conn.Close()
+}
diff --git a/src/net/http/fs.go b/src/net/http/fs.go
index c41d001..f61c138 100644
--- a/src/net/http/fs.go
+++ b/src/net/http/fs.go
@@ -451,15 +451,44 @@ func localRedirect(w ResponseWriter, r *Request, newPath string) {
 // ServeFile replies to the request with the contents of the named
 // file or directory.
 //
+// If the provided file or direcory name is a relative path, it is
+// interpreted relative to the current directory and may ascend to parent
+// directories. If the provided name is constructed from user input, it
+// should be sanitized before calling ServeFile. As a precaution, ServeFile
+// will reject requests where r.URL.Path contains a ".." path element.
+//
 // As a special case, ServeFile redirects any request where r.URL.Path
 // ends in "/index.html" to the same path, without the final
 // "index.html". To avoid such redirects either modify the path or
 // use ServeContent.
 func ServeFile(w ResponseWriter, r *Request, name string) {
+	if containsDotDot(r.URL.Path) {
+		// Too many programs use r.URL.Path to construct the argument to
+		// serveFile. Reject the request under the assumption that happened
+		// here and ".." may not be wanted.
+		// Note that name might not contain "..", for example if code (still
+		// incorrectly) used filepath.Join(myDir, r.URL.Path).
+		Error(w, "invalid URL path", StatusBadRequest)
+		return
+	}
 	dir, file := filepath.Split(name)
 	serveFile(w, r, Dir(dir), file, false)
 }
 
+func containsDotDot(v string) bool {
+	if !strings.Contains(v, "..") {
+		return false
+	}
+	for _, ent := range strings.FieldsFunc(v, isSlashRune) {
+		if ent == ".." {
+			return true
+		}
+	}
+	return false
+}
+
+func isSlashRune(r rune) bool { return r == '/' || r == '\\' }
+
 type fileHandler struct {
 	root FileSystem
 }
diff --git a/src/net/http/fs_test.go b/src/net/http/fs_test.go
index 2e17d3f..69d7806 100644
--- a/src/net/http/fs_test.go
+++ b/src/net/http/fs_test.go
@@ -5,6 +5,7 @@
 package http_test
 
 import (
+	"bufio"
 	"bytes"
 	"errors"
 	"fmt"
@@ -177,6 +178,36 @@ Cases:
 	}
 }
 
+func TestServeFile_DotDot(t *testing.T) {
+	tests := []struct {
+		req        string
+		wantStatus int
+	}{
+		{"/testdata/file", 200},
+		{"/../file", 400},
+		{"/..", 400},
+		{"/../", 400},
+		{"/../foo", 400},
+		{"/..\\foo", 400},
+		{"/file/a", 200},
+		{"/file/a..", 200},
+		{"/file/a/..", 400},
+		{"/file/a\\..", 400},
+	}
+	for _, tt := range tests {
+		req, err := ReadRequest(bufio.NewReader(strings.NewReader("GET " + tt.req + " HTTP/1.1\r\nHost: foo\r\n\r\n")))
+		if err != nil {
+			t.Errorf("bad request %q: %v", tt.req, err)
+			continue
+		}
+		rec := httptest.NewRecorder()
+		ServeFile(rec, req, "testdata/file")
+		if rec.Code != tt.wantStatus {
+			t.Errorf("for request %q, status = %d; want %d", tt.req, rec.Code, tt.wantStatus)
+		}
+	}
+}
+
 var fsRedirectTestData = []struct {
 	original, redirect string
 }{
diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go
index 7aae52e..e723629 100644
--- a/src/net/http/h2_bundle.go
+++ b/src/net/http/h2_bundle.go
@@ -24,6 +24,7 @@ import (
 	"encoding/binary"
 	"errors"
 	"fmt"
+	"internal/golang.org/x/net/http2/hpack"
 	"io"
 	"io/ioutil"
 	"log"
@@ -31,14 +32,13 @@ import (
 	"net/textproto"
 	"net/url"
 	"os"
+	"reflect"
 	"runtime"
 	"sort"
 	"strconv"
 	"strings"
 	"sync"
 	"time"
-
-	"golang.org/x/net/http2/hpack"
 )
 
 // ClientConnPool manages a pool of HTTP/2 client connections.
@@ -47,21 +47,29 @@ type http2ClientConnPool interface {
 	MarkDead(*http2ClientConn)
 }
 
+// TODO: use singleflight for dialing and addConnCalls?
 type http2clientConnPool struct {
-	t  *http2Transport
+	t *http2Transport
+
 	mu sync.Mutex // TODO: maybe switch to RWMutex
 	// TODO: add support for sharing conns based on cert names
 	// (e.g. share conn for googleapis.com and appspot.com)
-	conns   map[string][]*http2ClientConn // key is host:port
-	dialing map[string]*http2dialCall     // currently in-flight dials
-	keys    map[*http2ClientConn][]string
+	conns        map[string][]*http2ClientConn // key is host:port
+	dialing      map[string]*http2dialCall     // currently in-flight dials
+	keys         map[*http2ClientConn][]string
+	addConnCalls map[string]*http2addConnCall // in-flight addConnIfNeede calls
 }
 
 func (p *http2clientConnPool) GetClientConn(req *Request, addr string) (*http2ClientConn, error) {
-	return p.getClientConn(req, addr, true)
+	return p.getClientConn(req, addr, http2dialOnMiss)
 }
 
-func (p *http2clientConnPool) getClientConn(req *Request, addr string, dialOnMiss bool) (*http2ClientConn, error) {
+const (
+	http2dialOnMiss   = true
+	http2noDialOnMiss = false
+)
+
+func (p *http2clientConnPool) getClientConn(_ *Request, addr string, dialOnMiss bool) (*http2ClientConn, error) {
 	p.mu.Lock()
 	for _, cc := range p.conns[addr] {
 		if cc.CanTakeNewRequest() {
@@ -115,6 +123,64 @@ func (c *http2dialCall) dial(addr string) {
 	c.p.mu.Unlock()
 }
 
+// addConnIfNeeded makes a NewClientConn out of c if a connection for key doesn't
+// already exist. It coalesces concurrent calls with the same key.
+// This is used by the http1 Transport code when it creates a new connection. Because
+// the http1 Transport doesn't de-dup TCP dials to outbound hosts (because it doesn't know
+// the protocol), it can get into a situation where it has multiple TLS connections.
+// This code decides which ones live or die.
+// The return value used is whether c was used.
+// c is never closed.
+func (p *http2clientConnPool) addConnIfNeeded(key string, t *http2Transport, c *tls.Conn) (used bool, err error) {
+	p.mu.Lock()
+	for _, cc := range p.conns[key] {
+		if cc.CanTakeNewRequest() {
+			p.mu.Unlock()
+			return false, nil
+		}
+	}
+	call, dup := p.addConnCalls[key]
+	if !dup {
+		if p.addConnCalls == nil {
+			p.addConnCalls = make(map[string]*http2addConnCall)
+		}
+		call = &http2addConnCall{
+			p:    p,
+			done: make(chan struct{}),
+		}
+		p.addConnCalls[key] = call
+		go call.run(t, key, c)
+	}
+	p.mu.Unlock()
+
+	<-call.done
+	if call.err != nil {
+		return false, call.err
+	}
+	return !dup, nil
+}
+
+type http2addConnCall struct {
+	p    *http2clientConnPool
+	done chan struct{} // closed when done
+	err  error
+}
+
+func (c *http2addConnCall) run(t *http2Transport, key string, tc *tls.Conn) {
+	cc, err := t.NewClientConn(tc)
+
+	p := c.p
+	p.mu.Lock()
+	if err != nil {
+		c.err = err
+	} else {
+		p.addConnLocked(key, cc)
+	}
+	delete(p.addConnCalls, key)
+	p.mu.Unlock()
+	close(c.done)
+}
+
 func (p *http2clientConnPool) addConn(key string, cc *http2ClientConn) {
 	p.mu.Lock()
 	p.addConnLocked(key, cc)
@@ -181,11 +247,15 @@ func http2filterOutClientConn(in []*http2ClientConn, exclude *http2ClientConn) [
 	return out
 }
 
-func http2configureTransport(t1 *Transport) error {
+func http2configureTransport(t1 *Transport) (*http2Transport, error) {
 	connPool := new(http2clientConnPool)
-	t2 := &http2Transport{ConnPool: http2noDialClientConnPool{connPool}}
+	t2 := &http2Transport{
+		ConnPool: http2noDialClientConnPool{connPool},
+		t1:       t1,
+	}
+	connPool.t = t2
 	if err := http2registerHTTPSProtocol(t1, http2noDialH2RoundTripper{t2}); err != nil {
-		return err
+		return nil, err
 	}
 	if t1.TLSClientConfig == nil {
 		t1.TLSClientConfig = new(tls.Config)
@@ -197,12 +267,14 @@ func http2configureTransport(t1 *Transport) error {
 		t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1")
 	}
 	upgradeFn := func(authority string, c *tls.Conn) RoundTripper {
-		cc, err := t2.NewClientConn(c)
-		if err != nil {
-			c.Close()
+		addr := http2authorityAddr(authority)
+		if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil {
+			go c.Close()
 			return http2erringRoundTripper{err}
+		} else if !used {
+
+			go c.Close()
 		}
-		connPool.addConn(http2authorityAddr(authority), cc)
 		return t2
 	}
 	if m := t1.TLSNextProto; len(m) == 0 {
@@ -212,7 +284,7 @@ func http2configureTransport(t1 *Transport) error {
 	} else {
 		m["h2"] = upgradeFn
 	}
-	return nil
+	return t2, nil
 }
 
 // registerHTTPSProtocol calls Transport.RegisterProtocol but
@@ -233,8 +305,7 @@ func http2registerHTTPSProtocol(t *Transport, rt RoundTripper) (err error) {
 type http2noDialClientConnPool struct{ *http2clientConnPool }
 
 func (p http2noDialClientConnPool) GetClientConn(req *Request, addr string) (*http2ClientConn, error) {
-	const doDial = false
-	return p.getClientConn(req, addr, doDial)
+	return p.getClientConn(req, addr, http2noDialOnMiss)
 }
 
 // noDialH2RoundTripper is a RoundTripper which only tries to complete the request
@@ -1994,13 +2065,62 @@ func (s http2SettingID) String() string {
 	return fmt.Sprintf("UNKNOWN_SETTING_%d", uint16(s))
 }
 
-func http2validHeader(v string) bool {
+var (
+	http2errInvalidHeaderFieldName  = errors.New("http2: invalid header field name")
+	http2errInvalidHeaderFieldValue = errors.New("http2: invalid header field value")
+)
+
+// validHeaderFieldName reports whether v is a valid header field name (key).
+//  RFC 7230 says:
+//   header-field   = field-name ":" OWS field-value OWS
+//   field-name     = token
+//   tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." /
+//           "^" / "_" / "
+// Further, http2 says:
+//   "Just as in HTTP/1.x, header field names are strings of ASCII
+//   characters that are compared in a case-insensitive
+//   fashion. However, header field names MUST be converted to
+//   lowercase prior to their encoding in HTTP/2. "
+func http2validHeaderFieldName(v string) bool {
 	if len(v) == 0 {
 		return false
 	}
 	for _, r := range v {
+		if int(r) >= len(http2isTokenTable) || ('A' <= r && r <= 'Z') {
+			return false
+		}
+		if !http2isTokenTable[byte(r)] {
+			return false
+		}
+	}
+	return true
+}
 
-		if r >= 127 || ('A' <= r && r <= 'Z') {
+// validHeaderFieldValue reports whether v is a valid header field value.
+//
+// RFC 7230 says:
+//  field-value    = *( field-content / obs-fold )
+//  obj-fold       =  N/A to http2, and deprecated
+//  field-content  = field-vchar [ 1*( SP / HTAB ) field-vchar ]
+//  field-vchar    = VCHAR / obs-text
+//  obs-text       = %x80-FF
+//  VCHAR          = "any visible [USASCII] character"
+//
+// http2 further says: "Similarly, HTTP/2 allows header field values
+// that are not valid. While most of the values that can be encoded
+// will not alter header field parsing, carriage return (CR, ASCII
+// 0xd), line feed (LF, ASCII 0xa), and the zero character (NUL, ASCII
+// 0x0) might be exploited by an attacker if they are translated
+// verbatim. Any request or response that contains a character not
+// permitted in a header field value MUST be treated as malformed
+// (Section 8.1.2.6). Valid characters are defined by the
+// field-content ABNF rule in Section 3.2 of [RFC7230]."
+//
+// This function does not (yet?) properly handle the rejection of
+// strings that begin or end with SP or HTAB.
+func http2validHeaderFieldValue(v string) bool {
+	for i := 0; i < len(v); i++ {
+		if b := v[i]; b < ' ' && b != '\t' || b == 0x7f {
 			return false
 		}
 	}
@@ -2118,6 +2238,99 @@ func http2bodyAllowedForStatus(status int) bool {
 	return true
 }
 
+type http2httpError struct {
+	msg     string
+	timeout bool
+}
+
+func (e *http2httpError) Error() string { return e.msg }
+
+func (e *http2httpError) Timeout() bool { return e.timeout }
+
+func (e *http2httpError) Temporary() bool { return true }
+
+var http2errTimeout error = &http2httpError{msg: "http2: timeout awaiting response headers", timeout: true}
+
+var http2isTokenTable = [127]bool{
+	'!':  true,
+	'#':  true,
+	'$':  true,
+	'%':  true,
+	'&':  true,
+	'\'': true,
+	'*':  true,
+	'+':  true,
+	'-':  true,
+	'.':  true,
+	'0':  true,
+	'1':  true,
+	'2':  true,
+	'3':  true,
+	'4':  true,
+	'5':  true,
+	'6':  true,
+	'7':  true,
+	'8':  true,
+	'9':  true,
+	'A':  true,
+	'B':  true,
+	'C':  true,
+	'D':  true,
+	'E':  true,
+	'F':  true,
+	'G':  true,
+	'H':  true,
+	'I':  true,
+	'J':  true,
+	'K':  true,
+	'L':  true,
+	'M':  true,
+	'N':  true,
+	'O':  true,
+	'P':  true,
+	'Q':  true,
+	'R':  true,
+	'S':  true,
+	'T':  true,
+	'U':  true,
+	'W':  true,
+	'V':  true,
+	'X':  true,
+	'Y':  true,
+	'Z':  true,
+	'^':  true,
+	'_':  true,
+	'`':  true,
+	'a':  true,
+	'b':  true,
+	'c':  true,
+	'd':  true,
+	'e':  true,
+	'f':  true,
+	'g':  true,
+	'h':  true,
+	'i':  true,
+	'j':  true,
+	'k':  true,
+	'l':  true,
+	'm':  true,
+	'n':  true,
+	'o':  true,
+	'p':  true,
+	'q':  true,
+	'r':  true,
+	's':  true,
+	't':  true,
+	'u':  true,
+	'v':  true,
+	'w':  true,
+	'x':  true,
+	'y':  true,
+	'z':  true,
+	'|':  true,
+	'~':  true,
+}
+
 // pipe is a goroutine-safe io.Reader/io.Writer pair.  It's like
 // io.Pipe except there are no PipeReader/PipeWriter halves, and the
 // underlying buffer is an interface. (io.Pipe is always unbuffered)
@@ -2638,12 +2851,50 @@ func (sc *http2serverConn) logf(format string, args ...interface{}) {
 	}
 }
 
+var http2uintptrType = reflect.TypeOf(uintptr(0))
+
+// errno returns v's underlying uintptr, else 0.
+//
+// TODO: remove this helper function once http2 can use build
+// tags. See comment in isClosedConnError.
+func http2errno(v error) uintptr {
+	if rv := reflect.ValueOf(v); rv.Kind() == reflect.Uintptr {
+		return uintptr(rv.Uint())
+	}
+	return 0
+}
+
+// isClosedConnError reports whether err is an error from use of a closed
+// network connection.
+func http2isClosedConnError(err error) bool {
+	if err == nil {
+		return false
+	}
+
+	str := err.Error()
+	if strings.Contains(str, "use of closed network connection") {
+		return true
+	}
+
+	if runtime.GOOS == "windows" {
+		if oe, ok := err.(*net.OpError); ok && oe.Op == "read" {
+			if se, ok := oe.Err.(*os.SyscallError); ok && se.Syscall == "wsarecv" {
+				const WSAECONNABORTED = 10053
+				const WSAECONNRESET = 10054
+				if n := http2errno(se.Err); n == WSAECONNRESET || n == WSAECONNABORTED {
+					return true
+				}
+			}
+		}
+	}
+	return false
+}
+
 func (sc *http2serverConn) condlogf(err error, format string, args ...interface{}) {
 	if err == nil {
 		return
 	}
-	str := err.Error()
-	if err == io.EOF || strings.Contains(str, "use of closed network connection") {
+	if err == io.EOF || err == io.ErrUnexpectedEOF || http2isClosedConnError(err) {
 
 		sc.vlogf(format, args...)
 	} else {
@@ -2657,7 +2908,7 @@ func (sc *http2serverConn) onNewHeaderField(f hpack.HeaderField) {
 		sc.vlogf("http2: server decoded %v", f)
 	}
 	switch {
-	case !http2validHeader(f.Name):
+	case !http2validHeaderFieldValue(f.Value):
 		sc.req.invalidHeader = true
 	case strings.HasPrefix(f.Name, ":"):
 		if sc.req.sawRegularHeader {
@@ -2687,6 +2938,8 @@ func (sc *http2serverConn) onNewHeaderField(f hpack.HeaderField) {
 			return
 		}
 		*dst = f.Value
+	case !http2validHeaderFieldName(f.Name):
+		sc.req.invalidHeader = true
 	default:
 		sc.req.sawRegularHeader = true
 		sc.req.header.Add(sc.canonicalHeader(f.Name), f.Value)
@@ -2705,10 +2958,10 @@ func (st *http2stream) onNewTrailerField(f hpack.HeaderField) {
 		sc.vlogf("http2: server decoded trailer %v", f)
 	}
 	switch {
-	case !http2validHeader(f.Name):
+	case strings.HasPrefix(f.Name, ":"):
 		sc.req.invalidHeader = true
 		return
-	case strings.HasPrefix(f.Name, ":"):
+	case !http2validHeaderFieldName(f.Name) || !http2validHeaderFieldValue(f.Value):
 		sc.req.invalidHeader = true
 		return
 	default:
@@ -3158,7 +3411,7 @@ func (sc *http2serverConn) processFrameFromReader(res http2readFrameResult) bool
 			sc.goAway(http2ErrCodeFrameSize)
 			return true
 		}
-		clientGone := err == io.EOF || strings.Contains(err.Error(), "use of closed network connection")
+		clientGone := err == io.EOF || err == io.ErrUnexpectedEOF || http2isClosedConnError(err)
 		if clientGone {
 
 			return false
@@ -3187,7 +3440,7 @@ func (sc *http2serverConn) processFrameFromReader(res http2readFrameResult) bool
 		return true
 	default:
 		if res.err != nil {
-			sc.logf("http2: server closing client connection; error reading frame from client %s: %v", sc.conn.RemoteAddr(), err)
+			sc.vlogf("http2: server closing client connection; error reading frame from client %s: %v", sc.conn.RemoteAddr(), err)
 		} else {
 			sc.logf("http2: server closing client connection: %v", err)
 		}
@@ -4254,6 +4507,11 @@ type http2Transport struct {
 	// to mean no limit.
 	MaxHeaderListSize uint32
 
+	// t1, if non-nil, is the standard library Transport using
+	// this transport. Its settings are used (but not its
+	// RoundTrip method, etc).
+	t1 *Transport
+
 	connPoolOnce  sync.Once
 	connPoolOrDef http2ClientConnPool // non-nil version of ConnPool
 }
@@ -4269,11 +4527,7 @@ func (t *http2Transport) maxHeaderListSize() uint32 {
 }
 
 func (t *http2Transport) disableCompression() bool {
-	if t.DisableCompression {
-		return true
-	}
-
-	return false
+	return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression)
 }
 
 var http2errTransportVersion = errors.New("http2: ConfigureTransport is only supported starting at Go 1.6")
@@ -4282,7 +4536,8 @@ var http2errTransportVersion = errors.New("http2: ConfigureTransport is only sup
 // It requires Go 1.6 or later and returns an error if the net/http package is too old
 // or if t1 has already been HTTP/2-enabled.
 func http2ConfigureTransport(t1 *Transport) error {
-	return http2configureTransport(t1)
+	_, err := http2configureTransport(t1)
+	return err
 }
 
 func (t *http2Transport) connPool() http2ClientConnPool {
@@ -4328,7 +4583,7 @@ type http2ClientConn struct {
 	henc                 *hpack.Encoder
 	freeBuf              [][]byte
 
-	wmu  sync.Mutex // held while writing; acquire AFTER wmu if holding both
+	wmu  sync.Mutex // held while writing; acquire AFTER mu if holding both
 	werr error      // first write error that has occurred
 }
 
@@ -4346,7 +4601,7 @@ type http2clientStream struct {
 	inflow      http2flow // guarded by cc.mu
 	bytesRemain int64     // -1 means unknown; owned by transportResponseBody.Read
 	readErr     error     // sticky read error; owned by transportResponseBody.Read
-	stopReqBody bool      // stop writing req body; guarded by cc.mu
+	stopReqBody error     // if non-nil, stop writing req body; guarded by cc.mu
 
 	peerReset chan struct{} // closed on peer reset
 	resetErr  error         // populated before peerReset is closed
@@ -4389,10 +4644,13 @@ func (cs *http2clientStream) checkReset() error {
 	}
 }
 
-func (cs *http2clientStream) abortRequestBodyWrite() {
+func (cs *http2clientStream) abortRequestBodyWrite(err error) {
+	if err == nil {
+		panic("nil error")
+	}
 	cc := cs.cc
 	cc.mu.Lock()
-	cs.stopReqBody = true
+	cs.stopReqBody = err
 	cc.cond.Broadcast()
 	cc.mu.Unlock()
 }
@@ -4531,6 +4789,12 @@ func (t *http2Transport) dialTLSDefault(network, addr string, cfg *tls.Config) (
 	return cn, nil
 }
 
+// disableKeepAlives reports whether connections should be closed as
+// soon as possible after handling the first request.
+func (t *http2Transport) disableKeepAlives() bool {
+	return t.t1 != nil && t.t1.DisableKeepAlives
+}
+
 func (t *http2Transport) NewClientConn(c net.Conn) (*http2ClientConn, error) {
 	if http2VerboseLogs {
 		t.vlogf("http2: Transport creating client conn to %v", c.RemoteAddr())
@@ -4625,7 +4889,7 @@ func (cc *http2ClientConn) CanTakeNewRequest() bool {
 }
 
 func (cc *http2ClientConn) canTakeNewRequestLocked() bool {
-	return cc.goAway == nil &&
+	return cc.goAway == nil && !cc.closed &&
 		int64(len(cc.streams)+1) < int64(cc.maxConcurrentStreams) &&
 		cc.nextStreamID < 2147483647
 }
@@ -4705,6 +4969,14 @@ func http2commaSeparatedTrailers(req *Request) (string, error) {
 	return "", nil
 }
 
+func (cc *http2ClientConn) responseHeaderTimeout() time.Duration {
+	if cc.t.t1 != nil {
+		return cc.t.t1.ResponseHeaderTimeout
+	}
+
+	return 0
+}
+
 func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 	trailers, err := http2commaSeparatedTrailers(req)
 	if err != nil {
@@ -4712,6 +4984,25 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 	}
 	hasTrailers := trailers != ""
 
+	var body io.Reader = req.Body
+	contentLen := req.ContentLength
+	if req.Body != nil && contentLen == 0 {
+		// Test to see if it's actually zero or just unset.
+		var buf [1]byte
+		n, rerr := io.ReadFull(body, buf[:])
+		if rerr != nil && rerr != io.EOF {
+			contentLen = -1
+			body = http2errorReader{rerr}
+		} else if n == 1 {
+
+			contentLen = -1
+			body = io.MultiReader(bytes.NewReader(buf[:]), body)
+		} else {
+
+			body = nil
+		}
+	}
+
 	cc.mu.Lock()
 	if cc.closed || !cc.canTakeNewRequestLocked() {
 		cc.mu.Unlock()
@@ -4720,7 +5011,7 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 
 	cs := cc.newStream()
 	cs.req = req
-	hasBody := req.Body != nil
+	hasBody := body != nil
 
 	if !cc.t.disableCompression() &&
 		req.Header.Get("Accept-Encoding") == "" &&
@@ -4730,7 +5021,7 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 		cs.requestedGzip = true
 	}
 
-	hdrs := cc.encodeHeaders(req, cs.requestedGzip, trailers)
+	hdrs := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen)
 	cc.wmu.Lock()
 	endStream := !hasBody && !hasTrailers
 	werr := cc.writeHeaders(cs.ID, endStream, hdrs)
@@ -4746,24 +5037,32 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 		return nil, werr
 	}
 
+	var respHeaderTimer <-chan time.Time
 	var bodyCopyErrc chan error // result of body copy
 	if hasBody {
 		bodyCopyErrc = make(chan error, 1)
 		go func() {
-			bodyCopyErrc <- cs.writeRequestBody(req.Body)
+			bodyCopyErrc <- cs.writeRequestBody(body, req.Body)
 		}()
+	} else {
+		if d := cc.responseHeaderTimeout(); d != 0 {
+			timer := time.NewTimer(d)
+			defer timer.Stop()
+			respHeaderTimer = timer.C
+		}
 	}
 
 	readLoopResCh := cs.resc
 	requestCanceledCh := http2requestCancel(req)
-	requestCanceled := false
+	bodyWritten := false
+
 	for {
 		select {
 		case re := <-readLoopResCh:
 			res := re.res
 			if re.err != nil || res.StatusCode > 299 {
 
-				cs.abortRequestBodyWrite()
+				cs.abortRequestBodyWrite(http2errStopReqBodyWrite)
 			}
 			if re.err != nil {
 				cc.forgetStreamID(cs.ID)
@@ -4772,32 +5071,35 @@ func (cc *http2ClientConn) RoundTrip(req *Request) (*Response, error) {
 			res.Request = req
 			res.TLS = cc.tlsState
 			return res, nil
+		case <-respHeaderTimer:
+			cc.forgetStreamID(cs.ID)
+			if !hasBody || bodyWritten {
+				cc.writeStreamReset(cs.ID, http2ErrCodeCancel, nil)
+			} else {
+				cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel)
+			}
+			return nil, http2errTimeout
 		case <-requestCanceledCh:
 			cc.forgetStreamID(cs.ID)
-			cs.abortRequestBodyWrite()
-			if !hasBody {
+			if !hasBody || bodyWritten {
 				cc.writeStreamReset(cs.ID, http2ErrCodeCancel, nil)
-				return nil, http2errRequestCanceled
+			} else {
+				cs.abortRequestBodyWrite(http2errStopReqBodyWriteAndCancel)
 			}
-
-			requestCanceled = true
-			requestCanceledCh = nil
-			readLoopResCh = nil
+			return nil, http2errRequestCanceled
 		case <-cs.peerReset:
-			if requestCanceled {
-
-				return nil, http2errRequestCanceled
-			}
 
 			return nil, cs.resetErr
 		case err := <-bodyCopyErrc:
-			if requestCanceled {
-				cc.writeStreamReset(cs.ID, http2ErrCodeCancel, nil)
-				return nil, http2errRequestCanceled
-			}
 			if err != nil {
 				return nil, err
 			}
+			bodyWritten = true
+			if d := cc.responseHeaderTimeout(); d != 0 {
+				timer := time.NewTimer(d)
+				defer timer.Stop()
+				respHeaderTimer = timer.C
+			}
 		}
 	}
 }
@@ -4830,11 +5132,16 @@ func (cc *http2ClientConn) writeHeaders(streamID uint32, endStream bool, hdrs []
 	return cc.werr
 }
 
-// errAbortReqBodyWrite is an internal error value.
-// It doesn't escape to callers.
-var http2errAbortReqBodyWrite = errors.New("http2: aborting request body write")
+// internal error values; they don't escape to callers
+var (
+	// abort request body write; don't send cancel
+	http2errStopReqBodyWrite = errors.New("http2: aborting request body write")
+
+	// abort request body write, but send stream reset of cancel.
+	http2errStopReqBodyWriteAndCancel = errors.New("http2: canceling request")
+)
 
-func (cs *http2clientStream) writeRequestBody(body io.ReadCloser) (err error) {
+func (cs *http2clientStream) writeRequestBody(body io.Reader, bodyCloser io.Closer) (err error) {
 	cc := cs.cc
 	sentEnd := false
 	buf := cc.frameScratchBuffer()
@@ -4842,7 +5149,7 @@ func (cs *http2clientStream) writeRequestBody(body io.ReadCloser) (err error) {
 
 	defer func() {
 
-		cerr := body.Close()
+		cerr := bodyCloser.Close()
 		if err == nil {
 			err = cerr
 		}
@@ -4865,7 +5172,13 @@ func (cs *http2clientStream) writeRequestBody(body io.ReadCloser) (err error) {
 		for len(remain) > 0 && err == nil {
 			var allowed int32
 			allowed, err = cs.awaitFlowControl(len(remain))
-			if err != nil {
+			switch {
+			case err == http2errStopReqBodyWrite:
+				return err
+			case err == http2errStopReqBodyWriteAndCancel:
+				cc.writeStreamReset(cs.ID, http2ErrCodeCancel, nil)
+				return err
+			case err != nil:
 				return err
 			}
 			cc.wmu.Lock()
@@ -4919,8 +5232,8 @@ func (cs *http2clientStream) awaitFlowControl(maxBytes int) (taken int32, err er
 		if cc.closed {
 			return 0, http2errClientConnClosed
 		}
-		if cs.stopReqBody {
-			return 0, http2errAbortReqBodyWrite
+		if cs.stopReqBody != nil {
+			return 0, cs.stopReqBody
 		}
 		if err := cs.checkReset(); err != nil {
 			return 0, err
@@ -4949,7 +5262,7 @@ type http2badStringError struct {
 func (e *http2badStringError) Error() string { return fmt.Sprintf("%s %q", e.what, e.str) }
 
 // requires cc.mu be held.
-func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trailers string) []byte {
+func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trailers string, contentLength int64) []byte {
 	cc.hbuf.Reset()
 
 	host := req.Host
@@ -4970,7 +5283,7 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail
 	var didUA bool
 	for k, vv := range req.Header {
 		lowKey := strings.ToLower(k)
-		if lowKey == "host" {
+		if lowKey == "host" || lowKey == "content-length" {
 			continue
 		}
 		if lowKey == "user-agent" {
@@ -4988,6 +5301,9 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail
 			cc.writeHeader(lowKey, v)
 		}
 	}
+	if http2shouldSendReqContentLength(req.Method, contentLength) {
+		cc.writeHeader("content-length", strconv.FormatInt(contentLength, 10))
+	}
 	if addGzipHeader {
 		cc.writeHeader("accept-encoding", "gzip")
 	}
@@ -4997,6 +5313,27 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail
 	return cc.hbuf.Bytes()
 }
 
+// shouldSendReqContentLength reports whether the http2.Transport should send
+// a "content-length" request header. This logic is basically a copy of the net/http
+// transferWriter.shouldSendContentLength.
+// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown).
+// -1 means unknown.
+func http2shouldSendReqContentLength(method string, contentLength int64) bool {
+	if contentLength > 0 {
+		return true
+	}
+	if contentLength < 0 {
+		return false
+	}
+
+	switch method {
+	case "POST", "PUT", "PATCH":
+		return true
+	default:
+		return false
+	}
+}
+
 // requires cc.mu be held.
 func (cc *http2ClientConn) encodeTrailers(req *Request) []byte {
 	cc.hbuf.Reset()
@@ -5115,6 +5452,8 @@ func (rl *http2clientConnReadLoop) cleanup() {
 
 func (rl *http2clientConnReadLoop) run() error {
 	cc := rl.cc
+	closeWhenIdle := cc.t.disableKeepAlives()
+	gotReply := false
 	for {
 		f, err := cc.fr.ReadFrame()
 		if err != nil {
@@ -5129,18 +5468,25 @@ func (rl *http2clientConnReadLoop) run() error {
 		if http2VerboseLogs {
 			cc.vlogf("http2: Transport received %s", http2summarizeFrame(f))
 		}
+		maybeIdle := false
 
 		switch f := f.(type) {
 		case *http2HeadersFrame:
 			err = rl.processHeaders(f)
+			maybeIdle = true
+			gotReply = true
 		case *http2ContinuationFrame:
 			err = rl.processContinuation(f)
+			maybeIdle = true
 		case *http2DataFrame:
 			err = rl.processData(f)
+			maybeIdle = true
 		case *http2GoAwayFrame:
 			err = rl.processGoAway(f)
+			maybeIdle = true
 		case *http2RSTStreamFrame:
 			err = rl.processResetStream(f)
+			maybeIdle = true
 		case *http2SettingsFrame:
 			err = rl.processSettings(f)
 		case *http2PushPromiseFrame:
@@ -5155,6 +5501,9 @@ func (rl *http2clientConnReadLoop) run() error {
 		if err != nil {
 			return err
 		}
+		if closeWhenIdle && gotReply && maybeIdle && len(rl.activeRes) == 0 {
+			cc.closeIfIdle()
+		}
 	}
 }
 
@@ -5517,7 +5866,6 @@ func (cc *http2ClientConn) writeStreamReset(streamID uint32, code http2ErrCode,
 
 var (
 	http2errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit")
-	http2errInvalidHeaderKey       = errors.New("http2: invalid header key")
 	http2errPseudoTrailers         = errors.New("http2: invalid pseudo header in trailers")
 )
 
@@ -5534,8 +5882,8 @@ func (rl *http2clientConnReadLoop) checkHeaderField(f hpack.HeaderField) bool {
 		return false
 	}
 
-	if !http2validHeader(f.Name) {
-		rl.reqMalformed = http2errInvalidHeaderKey
+	if !http2validHeaderFieldValue(f.Value) {
+		rl.reqMalformed = http2errInvalidHeaderFieldValue
 		return false
 	}
 
@@ -5546,6 +5894,10 @@ func (rl *http2clientConnReadLoop) checkHeaderField(f hpack.HeaderField) bool {
 			return false
 		}
 	} else {
+		if !http2validHeaderFieldName(f.Name) {
+			rl.reqMalformed = http2errInvalidHeaderFieldName
+			return false
+		}
 		rl.sawRegHeader = true
 	}
 
@@ -5678,6 +6030,10 @@ func (gz *http2gzipReader) Close() error {
 	return gz.body.Close()
 }
 
+type http2errorReader struct{ err error }
+
+func (r http2errorReader) Read(p []byte) (int, error) { return 0, r.err }
+
 // writeFramer is implemented by any type that is used to write frames.
 type http2writeFramer interface {
 	writeFrame(http2writeContext) error
diff --git a/src/net/http/httputil/dump.go b/src/net/http/httputil/dump.go
index 6fe8fea..e22cc66 100644
--- a/src/net/http/httputil/dump.go
+++ b/src/net/http/httputil/dump.go
@@ -25,10 +25,10 @@ import (
 func drainBody(b io.ReadCloser) (r1, r2 io.ReadCloser, err error) {
 	var buf bytes.Buffer
 	if _, err = buf.ReadFrom(b); err != nil {
-		return nil, nil, err
+		return nil, b, err
 	}
 	if err = b.Close(); err != nil {
-		return nil, nil, err
+		return nil, b, err
 	}
 	return ioutil.NopCloser(&buf), ioutil.NopCloser(bytes.NewReader(buf.Bytes())), nil
 }
@@ -175,15 +175,22 @@ func dumpAsReceived(req *http.Request, w io.Writer) error {
 	return nil
 }
 
-// DumpRequest returns the as-received wire representation of req, optionally
-// including the request body, for debugging. It is for use in servers; use
-// DumpRequestOut for client requests.
+// DumpRequest returns the given request in its HTTP/1.x wire
+// representation. It should only be used by servers to debug client
+// requests. The returned representation is an approximation only;
+// some details of the initial request are lost while parsing it into
+// an http.Request. In particular, the order and case of header field
+// names are lost. The order of values in multi-valued headers is kept
+// intact. HTTP/2 requests are dumped in HTTP/1.x form, not in their
+// original binary representations.
+//
+// If body is true, DumpRequest also returns the body. To do so, it
+// consumes req.Body and then replaces it with a new io.ReadCloser
+// that yields the same bytes. If DumpRequest returns an error,
+// the state of req is undefined.
 //
-// DumpRequest is semantically a no-op, but in order to
-// dump the body, it reads the body data into memory and
-// changes req.Body to refer to the in-memory copy.
 // The documentation for http.Request.Write details which fields
-// of req are used.
+// of req are included in the dump.
 func DumpRequest(req *http.Request, body bool) (dump []byte, err error) {
 	save := req.Body
 	if !body || req.Body == nil {
@@ -191,7 +198,7 @@ func DumpRequest(req *http.Request, body bool) (dump []byte, err error) {
 	} else {
 		save, req.Body, err = drainBody(req.Body)
 		if err != nil {
-			return
+			return nil, err
 		}
 	}
 
@@ -285,7 +292,7 @@ func DumpResponse(resp *http.Response, body bool) (dump []byte, err error) {
 	} else {
 		save, resp.Body, err = drainBody(resp.Body)
 		if err != nil {
-			return
+			return nil, err
 		}
 	}
 	err = resp.Write(&b)
diff --git a/src/net/http/internal/chunked.go b/src/net/http/internal/chunked.go
index 3967ad6..2e62c00 100644
--- a/src/net/http/internal/chunked.go
+++ b/src/net/http/internal/chunked.go
@@ -220,8 +220,7 @@ type FlushAfterChunkWriter struct {
 }
 
 func parseHexUint(v []byte) (n uint64, err error) {
-	for _, b := range v {
-		n <<= 4
+	for i, b := range v {
 		switch {
 		case '0' <= b && b <= '9':
 			b = b - '0'
@@ -232,6 +231,10 @@ func parseHexUint(v []byte) (n uint64, err error) {
 		default:
 			return 0, errors.New("invalid byte in chunk length")
 		}
+		if i == 16 {
+			return 0, errors.New("http chunk length too large")
+		}
+		n <<= 4
 		n |= uint64(b)
 	}
 	return
diff --git a/src/net/http/internal/chunked_test.go b/src/net/http/internal/chunked_test.go
index 7c1c916..a136dc9 100644
--- a/src/net/http/internal/chunked_test.go
+++ b/src/net/http/internal/chunked_test.go
@@ -139,19 +139,35 @@ func TestChunkReaderAllocs(t *testing.T) {
 }
 
 func TestParseHexUint(t *testing.T) {
+	type testCase struct {
+		in      string
+		want    uint64
+		wantErr string
+	}
+	tests := []testCase{
+		{"x", 0, "invalid byte in chunk length"},
+		{"0000000000000000", 0, ""},
+		{"0000000000000001", 1, ""},
+		{"ffffffffffffffff", 1<<64 - 1, ""},
+		{"000000000000bogus", 0, "invalid byte in chunk length"},
+		{"00000000000000000", 0, "http chunk length too large"}, // could accept if we wanted
+		{"10000000000000000", 0, "http chunk length too large"},
+		{"00000000000000001", 0, "http chunk length too large"}, // could accept if we wanted
+	}
 	for i := uint64(0); i <= 1234; i++ {
-		line := []byte(fmt.Sprintf("%x", i))
-		got, err := parseHexUint(line)
-		if err != nil {
-			t.Fatalf("on %d: %v", i, err)
-		}
-		if got != i {
-			t.Errorf("for input %q = %d; want %d", line, got, i)
-		}
+		tests = append(tests, testCase{in: fmt.Sprintf("%x", i), want: i})
 	}
-	_, err := parseHexUint([]byte("bogus"))
-	if err == nil {
-		t.Error("expected error on bogus input")
+	for _, tt := range tests {
+		got, err := parseHexUint([]byte(tt.in))
+		if tt.wantErr != "" {
+			if !strings.Contains(fmt.Sprint(err), tt.wantErr) {
+				t.Errorf("parseHexUint(%q) = %v, %v; want error %q", tt.in, got, err, tt.wantErr)
+			}
+		} else {
+			if err != nil || got != tt.want {
+				t.Errorf("parseHexUint(%q) = %v, %v; want %v", tt.in, got, err, tt.want)
+			}
+		}
 	}
 }
 
diff --git a/src/net/http/request.go b/src/net/http/request.go
index c2f5f26..16c5bb4 100644
--- a/src/net/http/request.go
+++ b/src/net/http/request.go
@@ -93,8 +93,8 @@ type Request struct {
 	// The protocol version for incoming server requests.
 	//
 	// For client requests these fields are ignored. The HTTP
-	// transport code uses either HTTP/1.1 or HTTP/2.0 by default,
-	// depending on what the server supports.
+	// client code always uses either HTTP/1.1 or HTTP/2.
+	// See the docs on Transport for details.
 	Proto      string // "HTTP/1.0"
 	ProtoMajor int    // 1
 	ProtoMinor int    // 0
diff --git a/src/net/http/response_test.go b/src/net/http/response_test.go
index b4bf09a..d8a5340 100644
--- a/src/net/http/response_test.go
+++ b/src/net/http/response_test.go
@@ -822,7 +822,7 @@ func TestReadResponseErrors(t *testing.T) {
 		if err := matchErr(rerr, tt.wantErr); err != nil {
 			name := tt.name
 			if name == "" {
-				name = fmt.Sprintf("%i. input %q", i, tt.in)
+				name = fmt.Sprintf("%d. input %q", i, tt.in)
 			}
 			t.Errorf("%s: %v", name, err)
 		}
diff --git a/src/net/http/serve_test.go b/src/net/http/serve_test.go
index 86f4b66..f8cad80 100644
--- a/src/net/http/serve_test.go
+++ b/src/net/http/serve_test.go
@@ -3827,7 +3827,7 @@ func TestServerValidatesHostHeader(t *testing.T) {
 		{"HTTP/1.0", "Host: \xff\r\n", 400},
 	}
 	for _, tt := range tests {
-		conn := &testConn{closec: make(chan bool)}
+		conn := &testConn{closec: make(chan bool, 1)}
 		io.WriteString(&conn.readBuf, "GET / "+tt.proto+"\r\n"+tt.host+"\r\n")
 
 		ln := &oneConnListener{conn}
@@ -3867,7 +3867,7 @@ func TestServerValidatesHeaders(t *testing.T) {
 		{"foo: foo\xfffoo\r\n", 200}, // non-ASCII high octets in value are fine
 	}
 	for _, tt := range tests {
-		conn := &testConn{closec: make(chan bool)}
+		conn := &testConn{closec: make(chan bool, 1)}
 		io.WriteString(&conn.readBuf, "GET / HTTP/1.1\r\nHost: foo\r\n"+tt.header+"\r\n")
 
 		ln := &oneConnListener{conn}
diff --git a/src/net/http/server.go b/src/net/http/server.go
index 8d50ffc..004a1f9 100644
--- a/src/net/http/server.go
+++ b/src/net/http/server.go
@@ -347,7 +347,7 @@ type response struct {
 	// written.
 	trailers []string
 
-	handlerDone bool // set true when the handler exits
+	handlerDone atomicBool // set true when the handler exits
 
 	// Buffers for Date and Content-Length
 	dateBuf [len(TimeFormat)]byte
@@ -358,6 +358,11 @@ type response struct {
 	closeNotifyCh <-chan bool
 }
 
+type atomicBool int32
+
+func (b *atomicBool) isSet() bool { return atomic.LoadInt32((*int32)(b)) != 0 }
+func (b *atomicBool) setTrue()    { atomic.StoreInt32((*int32)(b), 1) }
+
 // declareTrailer is called for each Trailer header when the
 // response header is written. It notes that a header will need to be
 // written in the trailers at the end of the response.
@@ -643,10 +648,12 @@ func (ecr *expectContinueReader) Close() error {
 	return ecr.readCloser.Close()
 }
 
-// TimeFormat is the time format to use with
-// time.Parse and time.Time.Format when parsing
-// or generating times in HTTP headers.
-// It is like time.RFC1123 but hard codes GMT as the time zone.
+// TimeFormat is the time format to use when generating times in HTTP
+// headers. It is like time.RFC1123 but hard-codes GMT as the time
+// zone. The time being formatted must be in UTC for Format to
+// generate the correct format.
+//
+// For parsing this time format, see ParseTime.
 const TimeFormat = "Mon, 02 Jan 2006 15:04:05 GMT"
 
 // appendTime is a non-allocating version of []byte(t.UTC().Format(TimeFormat))
@@ -911,7 +918,7 @@ func (cw *chunkWriter) writeHeader(p []byte) {
 	// send a Content-Length header.
 	// Further, we don't send an automatic Content-Length if they
 	// set a Transfer-Encoding, because they're generally incompatible.
-	if w.handlerDone && !trailers && !hasTE && bodyAllowedForStatus(w.status) && header.get("Content-Length") == "" && (!isHEAD || len(p) > 0) {
+	if w.handlerDone.isSet() && !trailers && !hasTE && bodyAllowedForStatus(w.status) && header.get("Content-Length") == "" && (!isHEAD || len(p) > 0) {
 		w.contentLength = int64(len(p))
 		setHeader.contentLength = strconv.AppendInt(cw.res.clenBuf[:0], int64(len(p)), 10)
 	}
@@ -1234,7 +1241,7 @@ func (w *response) write(lenData int, dataB []byte, dataS string) (n int, err er
 }
 
 func (w *response) finishRequest() {
-	w.handlerDone = true
+	w.handlerDone.setTrue()
 
 	if !w.wroteHeader {
 		w.WriteHeader(StatusOK)
@@ -1498,6 +1505,9 @@ func (w *response) sendExpectationFailed() {
 // Hijack implements the Hijacker.Hijack method. Our response is both a ResponseWriter
 // and a Hijacker.
 func (w *response) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) {
+	if w.handlerDone.isSet() {
+		panic("net/http: Hijack called after ServeHTTP finished")
+	}
 	if w.wroteHeader {
 		w.cw.flush()
 	}
@@ -1521,6 +1531,9 @@ func (w *response) Hijack() (rwc net.Conn, buf *bufio.ReadWriter, err error) {
 }
 
 func (w *response) CloseNotify() <-chan bool {
+	if w.handlerDone.isSet() {
+		panic("net/http: CloseNotify called after ServeHTTP finished")
+	}
 	c := w.conn
 	c.mu.Lock()
 	defer c.mu.Unlock()
diff --git a/src/net/http/transport.go b/src/net/http/transport.go
index 9378b83..41df906 100644
--- a/src/net/http/transport.go
+++ b/src/net/http/transport.go
@@ -57,6 +57,10 @@ const DefaultMaxIdleConnsPerHost = 2
 //
 // A Transport is a low-level primitive for making HTTP and HTTPS requests.
 // For high-level functionality, such as cookies and redirects, see Client.
+//
+// Transport uses HTTP/1.1 for HTTP URLs and either HTTP/1.1 or HTTP/2
+// for HTTPS URLs, depending on whether the server supports HTTP/2.
+// See the package docs for more about HTTP/2.
 type Transport struct {
 	idleMu     sync.Mutex
 	wantIdle   bool // user has requested to close all idle conns
@@ -142,10 +146,14 @@ type Transport struct {
 	// If TLSNextProto is nil, HTTP/2 support is enabled automatically.
 	TLSNextProto map[string]func(authority string, c *tls.Conn) RoundTripper
 
-	nextProtoOnce sync.Once // guards initialization of TLSNextProto (onceSetNextProtoDefaults)
+	// nextProtoOnce guards initialization of TLSNextProto and
+	// h2transport (via onceSetNextProtoDefaults)
+	nextProtoOnce sync.Once
+	h2transport   *http2Transport // non-nil if http2 wired up
 
 	// TODO: tunable on global max cached connections
 	// TODO: tunable on timeout on cached connections
+	// TODO: tunable on max per-host TCP dials in flight (Issue 13957)
 }
 
 // onceSetNextProtoDefaults initializes TLSNextProto.
@@ -157,9 +165,11 @@ func (t *Transport) onceSetNextProtoDefaults() {
 	if t.TLSNextProto != nil {
 		return
 	}
-	err := http2ConfigureTransport(t)
+	t2, err := http2configureTransport(t)
 	if err != nil {
 		log.Printf("Error enabling Transport HTTP/2 support: %v", err)
+	} else {
+		t.h2transport = t2
 	}
 }
 
@@ -288,6 +298,7 @@ func (t *Transport) RoundTrip(req *Request) (*Response, error) {
 		var resp *Response
 		if pconn.alt != nil {
 			// HTTP/2 path.
+			t.setReqCanceler(req, nil) // not cancelable with CancelRequest
 			resp, err = pconn.alt.RoundTrip(req)
 		} else {
 			resp, err = pconn.roundTrip(treq)
@@ -367,6 +378,7 @@ func (t *Transport) RegisterProtocol(scheme string, rt RoundTripper) {
 // a "keep-alive" state. It does not interrupt any connections currently
 // in use.
 func (t *Transport) CloseIdleConnections() {
+	t.nextProtoOnce.Do(t.onceSetNextProtoDefaults)
 	t.idleMu.Lock()
 	m := t.idleConn
 	t.idleConn = nil
@@ -378,12 +390,16 @@ func (t *Transport) CloseIdleConnections() {
 			pconn.close(errCloseIdleConns)
 		}
 	}
+	if t2 := t.h2transport; t2 != nil {
+		t2.CloseIdleConnections()
+	}
 }
 
 // CancelRequest cancels an in-flight request by closing its connection.
 // CancelRequest should only be called after RoundTrip has returned.
 //
-// Deprecated: Use Request.Cancel instead.
+// Deprecated: Use Request.Cancel instead. CancelRequest can not cancel
+// HTTP/2 requests.
 func (t *Transport) CancelRequest(req *Request) {
 	t.reqMu.Lock()
 	cancel := t.reqCanceler[req]
@@ -713,6 +729,12 @@ func (t *Transport) dialConn(cm connectMethod) (*persistConn, error) {
 			return nil, errors.New("net/http: Transport.DialTLS returned (nil, nil)")
 		}
 		if tc, ok := pconn.conn.(*tls.Conn); ok {
+			// Handshake here, in case DialTLS didn't. TLSNextProto below
+			// depends on it for knowing the connection state.
+			if err := tc.Handshake(); err != nil {
+				go pconn.conn.Close()
+				return nil, err
+			}
 			cs := tc.ConnectionState()
 			pconn.tlsState = &cs
 		}
diff --git a/src/net/lookup_test.go b/src/net/lookup_test.go
index 677a5f5..439496a 100644
--- a/src/net/lookup_test.go
+++ b/src/net/lookup_test.go
@@ -441,8 +441,19 @@ func TestLookupDotsWithLocalSource(t *testing.T) {
 		if i == 1 {
 			mode = "netcgo"
 		}
-		for _, name := range names {
+	loop:
+		for i, name := range names {
 			if strings.Index(name, ".") == len(name)-1 { // "localhost" not "localhost."
+				for j := range names {
+					if j == i {
+						continue
+					}
+					if names[j] == name[:len(name)-1] {
+						// It's OK if we find the name without the dot,
+						// as some systems say 127.0.0.1 localhost localhost.
+						continue loop
+					}
+				}
 				t.Errorf("%s: got %s; want %s", mode, name, name[:len(name)-1])
 			} else if strings.Contains(name, ".") && !strings.HasSuffix(name, ".") { // "localhost.localdomain." not "localhost.localdomain"
 				t.Errorf("%s: got %s; want name ending with trailing dot", mode, name)
@@ -455,7 +466,7 @@ func TestLookupDotsWithRemoteSource(t *testing.T) {
 	if testing.Short() && testenv.Builder() == "" || !*testExternal {
 		t.Skip("avoid external network")
 	}
-	if !supportsIPv4 || *testIPv4 {
+	if !supportsIPv4 || !*testIPv4 {
 		t.Skip("IPv4 is required")
 	}
 
diff --git a/src/net/net_windows_test.go b/src/net/net_windows_test.go
index 2e9a0ae..095a339 100644
--- a/src/net/net_windows_test.go
+++ b/src/net/net_windows_test.go
@@ -12,6 +12,7 @@ import (
 	"io/ioutil"
 	"os"
 	"os/exec"
+	"regexp"
 	"sort"
 	"strings"
 	"syscall"
@@ -374,6 +375,14 @@ func netshInterfaceIPv6ShowAddress(name string) ([]string, error) {
 		}
 		// remove scope ID if present
 		f = bytes.Split(f[1], []byte{'%'})
+
+		// netsh can create IPv4-embedded IPv6 addresses, like fe80::5efe:192.168.140.1.
+		// Convert these to all hexadecimal fe80::5efe:c0a8:8c01 for later string comparisons.
+		ipv4Tail := regexp.MustCompile(`:\d+\.\d+\.\d+\.\d+$`)
+		if ipv4Tail.Match(f[0]) {
+			f[0] = []byte(ParseIP(string(f[0])).String())
+		}
+
 		addrs = append(addrs, string(bytes.ToLower(bytes.TrimSpace(f[0]))))
 	}
 	return addrs, nil
@@ -391,6 +400,10 @@ func TestInterfaceAddrsWithNetsh(t *testing.T) {
 		t.Fatal(err)
 	}
 	for _, ifi := range ift {
+		// Skip the interface if it's down.
+		if (ifi.Flags & FlagUp) == 0 {
+			continue
+		}
 		have := make([]string, 0)
 		addrs, err := ifi.Addrs()
 		if err != nil {
diff --git a/src/net/url/url.go b/src/net/url/url.go
index 3ea7563..1a93e34 100644
--- a/src/net/url/url.go
+++ b/src/net/url/url.go
@@ -193,8 +193,9 @@ func unescape(s string, mode encoding) (string, error) {
 				// that are valid host name bytes in their unescaped form.
 				// That is, you can use escaping in the zone identifier but not
 				// to introduce bytes you couldn't just write directly.
+				// But Windows puts spaces here! Yay.
 				v := unhex(s[i+1])<<4 | unhex(s[i+2])
-				if s[i:i+3] != "%25" && shouldEscape(v, encodeHost) {
+				if s[i:i+3] != "%25" && v != ' ' && shouldEscape(v, encodeHost) {
 					return "", EscapeError(s[i : i+3])
 				}
 			}
diff --git a/src/net/url/url_test.go b/src/net/url/url_test.go
index c31b189..d3f8487 100644
--- a/src/net/url/url_test.go
+++ b/src/net/url/url_test.go
@@ -531,6 +531,17 @@ var urltests = []URLTest{
 		},
 		"",
 	},
+	// spaces in hosts are disallowed but escaped spaces in IPv6 scope IDs are grudgingly OK.
+	// This happens on Windows.
+	// golang.org/issue/14002
+	{
+		"tcp://[2020::2020:20:2020:2020%25Windows%20Loves%20Spaces]:2020",
+		&URL{
+			Scheme: "tcp",
+			Host:   "[2020::2020:20:2020:2020%Windows Loves Spaces]:2020",
+		},
+		"",
+	},
 }
 
 // more useful string for debugging than fmt's struct printer
diff --git a/src/runtime/asm_amd64.s b/src/runtime/asm_amd64.s
index cac032c..5094812 100644
--- a/src/runtime/asm_amd64.s
+++ b/src/runtime/asm_amd64.s
@@ -1350,14 +1350,14 @@ hugeloop:
 hugeloop_avx2:
 	CMPQ	BX, $64
 	JB	bigloop_avx2
-	MOVHDU	(SI), X0
-	MOVHDU	(DI), X1
-	MOVHDU	32(SI), X2
-	MOVHDU	32(DI), X3
-	VPCMPEQB	X1, X0, X4
-	VPCMPEQB	X2, X3, X5
-	VPAND	X4, X5, X6
-	VPMOVMSKB X6, DX
+	VMOVDQU	(SI), Y0
+	VMOVDQU	(DI), Y1
+	VMOVDQU	32(SI), Y2
+	VMOVDQU	32(DI), Y3
+	VPCMPEQB	Y1, Y0, Y4
+	VPCMPEQB	Y2, Y3, Y5
+	VPAND	Y4, Y5, Y6
+	VPMOVMSKB Y6, DX
 	ADDQ	$64, SI
 	ADDQ	$64, DI
 	SUBQ	$64, BX
@@ -1614,16 +1614,16 @@ big_loop:
 	// Compare 64-bytes per loop iteration.
 	// Loop is unrolled and uses AVX2.
 big_loop_avx2:
-	MOVHDU	(SI), X2
-	MOVHDU	(DI), X3
-	MOVHDU	32(SI), X4
-	MOVHDU	32(DI), X5
-	VPCMPEQB X2, X3, X0
-	VPMOVMSKB X0, AX
+	VMOVDQU	(SI), Y2
+	VMOVDQU	(DI), Y3
+	VMOVDQU	32(SI), Y4
+	VMOVDQU	32(DI), Y5
+	VPCMPEQB Y2, Y3, Y0
+	VPMOVMSKB Y0, AX
 	XORL	$0xffffffff, AX
 	JNE	diff32_avx2
-	VPCMPEQB X4, X5, X6
-	VPMOVMSKB X6, AX
+	VPCMPEQB Y4, Y5, Y6
+	VPMOVMSKB Y6, AX
 	XORL	$0xffffffff, AX
 	JNE	diff64_avx2
 
@@ -1908,26 +1908,26 @@ avx2:
 	JNE no_avx2
 	MOVD AX, X0
 	LEAQ -32(SI)(BX*1), R11
-	VPBROADCASTB  X0, X1
+	VPBROADCASTB  X0, Y1
 avx2_loop:
-	MOVHDU (DI), X2
-	VPCMPEQB X1, X2, X3
-	VPTEST X3, X3
+	VMOVDQU (DI), Y2
+	VPCMPEQB Y1, Y2, Y3
+	VPTEST Y3, Y3
 	JNZ avx2success
 	ADDQ $32, DI
 	CMPQ DI, R11
 	JLT avx2_loop
 	MOVQ R11, DI
-	MOVHDU (DI), X2
-	VPCMPEQB X1, X2, X3
-	VPTEST X3, X3
+	VMOVDQU (DI), Y2
+	VPCMPEQB Y1, Y2, Y3
+	VPTEST Y3, Y3
 	JNZ avx2success
 	VZEROUPPER
 	MOVQ $-1, (R8)
 	RET
 
 avx2success:
-	VPMOVMSKB X3, DX
+	VPMOVMSKB Y3, DX
 	BSFL DX, DX
 	SUBQ SI, DI
 	ADDQ DI, DX
diff --git a/src/runtime/asm_arm.s b/src/runtime/asm_arm.s
index 09fbc95..07894a3 100644
--- a/src/runtime/asm_arm.s
+++ b/src/runtime/asm_arm.s
@@ -86,8 +86,12 @@ TEXT runtime·breakpoint(SB),NOSPLIT,$0-0
 #ifdef GOOS_nacl
 	WORD	$0xe125be7f	// BKPT 0x5bef, NACL_INSTR_ARM_BREAKPOINT
 #else
+#ifdef GOOS_plan9
+	WORD	$0xD1200070	// undefined instruction used as armv5 breakpoint in Plan 9
+#else
 	WORD	$0xe7f001f0	// undefined instruction that gdb understands is a software breakpoint
 #endif
+#endif
 	RET
 
 TEXT runtime·asminit(SB),NOSPLIT,$0-0
diff --git a/src/runtime/cgo/gcc_android.c b/src/runtime/cgo/gcc_android.c
index be27725..a3bc6c4 100644
--- a/src/runtime/cgo/gcc_android.c
+++ b/src/runtime/cgo/gcc_android.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <stdarg.h>
 #include <android/log.h>
 #include "libcgo.h"
diff --git a/src/runtime/cgo/gcc_android_386.c b/src/runtime/cgo/gcc_android_386.c
index a82d7d0..db1d48a 100644
--- a/src/runtime/cgo/gcc_android_386.c
+++ b/src/runtime/cgo/gcc_android_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <string.h> /* for strerror */
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_android_amd64.c b/src/runtime/cgo/gcc_android_amd64.c
index 4cea459..17d88ce 100644
--- a/src/runtime/cgo/gcc_android_amd64.c
+++ b/src/runtime/cgo/gcc_android_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <string.h> /* for strerror */
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_android_arm.c b/src/runtime/cgo/gcc_android_arm.c
index 85cd244..67cb5a8 100644
--- a/src/runtime/cgo/gcc_android_arm.c
+++ b/src/runtime/cgo/gcc_android_arm.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <signal.h>
 #include <stdio.h>
diff --git a/src/runtime/cgo/gcc_android_arm64.c b/src/runtime/cgo/gcc_android_arm64.c
index 5d4cefe..acf3735 100644
--- a/src/runtime/cgo/gcc_android_arm64.c
+++ b/src/runtime/cgo/gcc_android_arm64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <signal.h>
 #include <stdio.h>
diff --git a/src/runtime/cgo/gcc_darwin_386.c b/src/runtime/cgo/gcc_darwin_386.c
index 6668ba4..a94e5ee 100644
--- a/src/runtime/cgo/gcc_darwin_386.c
+++ b/src/runtime/cgo/gcc_darwin_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <string.h> /* for strerror */
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_darwin_amd64.c b/src/runtime/cgo/gcc_darwin_amd64.c
index dc679ac..b70c833 100644
--- a/src/runtime/cgo/gcc_darwin_amd64.c
+++ b/src/runtime/cgo/gcc_darwin_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <string.h> /* for strerror */
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_darwin_arm.c b/src/runtime/cgo/gcc_darwin_arm.c
index c303b91..c0ce449 100644
--- a/src/runtime/cgo/gcc_darwin_arm.c
+++ b/src/runtime/cgo/gcc_darwin_arm.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <limits.h>
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_darwin_arm64.c b/src/runtime/cgo/gcc_darwin_arm64.c
index b64a063..1ba00b0 100644
--- a/src/runtime/cgo/gcc_darwin_arm64.c
+++ b/src/runtime/cgo/gcc_darwin_arm64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <limits.h>
 #include <pthread.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_dragonfly_amd64.c b/src/runtime/cgo/gcc_dragonfly_amd64.c
index f79f652..9d02add 100644
--- a/src/runtime/cgo/gcc_dragonfly_amd64.c
+++ b/src/runtime/cgo/gcc_dragonfly_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <sys/signalvar.h>
 #include <pthread.h>
@@ -56,6 +58,7 @@ static void*
 threadentry(void *v)
 {
 	ThreadStart ts;
+	stack_t ss;
 
 	ts = *(ThreadStart*)v;
 	free(v);
@@ -65,6 +68,17 @@ threadentry(void *v)
 	 */
 	setg_gcc((void*)ts.g);
 
+	// On DragonFly, a new thread inherits the signal stack of the
+	// creating thread.  That confuses minit, so we remove that
+	// signal stack here before calling the regular mstart.  It's
+	// a bit baroque to remove a signal stack here only to add one
+	// in minit, but it's a simple change that keeps DragonFly
+	// working like other OS's.  At this point all signals are
+	// blocked, so there is no race.
+	memset(&ss, 0, sizeof ss);
+	ss.ss_flags = SS_DISABLE;
+	sigaltstack(&ss, nil);
+
 	crosscall_amd64(ts.fn);
 	return nil;
 }
diff --git a/src/runtime/cgo/gcc_fatalf.c b/src/runtime/cgo/gcc_fatalf.c
index 21c1acf..c931b79 100644
--- a/src/runtime/cgo/gcc_fatalf.c
+++ b/src/runtime/cgo/gcc_fatalf.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // +build !android,linux
 
 #include <stdarg.h>
diff --git a/src/runtime/cgo/gcc_freebsd_386.c b/src/runtime/cgo/gcc_freebsd_386.c
index 074418f..2afdf20 100644
--- a/src/runtime/cgo/gcc_freebsd_386.c
+++ b/src/runtime/cgo/gcc_freebsd_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <sys/signalvar.h>
 #include <pthread.h>
diff --git a/src/runtime/cgo/gcc_freebsd_amd64.c b/src/runtime/cgo/gcc_freebsd_amd64.c
index f79f652..bf71d4c 100644
--- a/src/runtime/cgo/gcc_freebsd_amd64.c
+++ b/src/runtime/cgo/gcc_freebsd_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <sys/signalvar.h>
 #include <pthread.h>
diff --git a/src/runtime/cgo/gcc_freebsd_arm.c b/src/runtime/cgo/gcc_freebsd_arm.c
index 2a86a91..60bca55 100644
--- a/src/runtime/cgo/gcc_freebsd_arm.c
+++ b/src/runtime/cgo/gcc_freebsd_arm.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <machine/sysarch.h>
 #include <sys/signalvar.h>
diff --git a/src/runtime/cgo/gcc_libinit.c b/src/runtime/cgo/gcc_libinit.c
index c3e94f5..5b9558a 100644
--- a/src/runtime/cgo/gcc_libinit.c
+++ b/src/runtime/cgo/gcc_libinit.c
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
 // +build darwin dragonfly freebsd linux netbsd solaris
 // +build !ppc64,!ppc64le
 
diff --git a/src/runtime/cgo/gcc_libinit_linux_ppc64x.c b/src/runtime/cgo/gcc_libinit_linux_ppc64x.c
index 82413a5..18ccf93 100644
--- a/src/runtime/cgo/gcc_libinit_linux_ppc64x.c
+++ b/src/runtime/cgo/gcc_libinit_linux_ppc64x.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // TODO: see issue #10410
 // +build linux
 // +build ppc64 ppc64le
diff --git a/src/runtime/cgo/gcc_libinit_openbsd.c b/src/runtime/cgo/gcc_libinit_openbsd.c
index 7e5b646..13904ee 100644
--- a/src/runtime/cgo/gcc_libinit_openbsd.c
+++ b/src/runtime/cgo/gcc_libinit_openbsd.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <stdio.h>
 #include <stdlib.h>
 
diff --git a/src/runtime/cgo/gcc_libinit_windows.c b/src/runtime/cgo/gcc_libinit_windows.c
index 7e5b646..13904ee 100644
--- a/src/runtime/cgo/gcc_libinit_windows.c
+++ b/src/runtime/cgo/gcc_libinit_windows.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <stdio.h>
 #include <stdlib.h>
 
diff --git a/src/runtime/cgo/gcc_linux_386.c b/src/runtime/cgo/gcc_linux_386.c
index 8fb7130..2457eb3 100644
--- a/src/runtime/cgo/gcc_linux_386.c
+++ b/src/runtime/cgo/gcc_linux_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <string.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_linux_amd64.c b/src/runtime/cgo/gcc_linux_amd64.c
index 51ca644..5113a76 100644
--- a/src/runtime/cgo/gcc_linux_amd64.c
+++ b/src/runtime/cgo/gcc_linux_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <errno.h>
 #include <string.h> // strerror
diff --git a/src/runtime/cgo/gcc_linux_arm.c b/src/runtime/cgo/gcc_linux_arm.c
index 7d4b4d6..ce940fe 100644
--- a/src/runtime/cgo/gcc_linux_arm.c
+++ b/src/runtime/cgo/gcc_linux_arm.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <string.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_linux_arm64.c b/src/runtime/cgo/gcc_linux_arm64.c
index ea11cf5..babbd50 100644
--- a/src/runtime/cgo/gcc_linux_arm64.c
+++ b/src/runtime/cgo/gcc_linux_arm64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <string.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_linux_ppc64x.c b/src/runtime/cgo/gcc_linux_ppc64x.c
index b176295..1264ab5 100644
--- a/src/runtime/cgo/gcc_linux_ppc64x.c
+++ b/src/runtime/cgo/gcc_linux_ppc64x.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // +build ppc64 ppc64le
 
 #include <pthread.h>
diff --git a/src/runtime/cgo/gcc_mmap.c b/src/runtime/cgo/gcc_mmap.c
index 10d589f..f2bcc98 100644
--- a/src/runtime/cgo/gcc_mmap.c
+++ b/src/runtime/cgo/gcc_mmap.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // +build linux,amd64
 
 #include <errno.h>
diff --git a/src/runtime/cgo/gcc_netbsd_386.c b/src/runtime/cgo/gcc_netbsd_386.c
index 2505e6d..4355bd0 100644
--- a/src/runtime/cgo/gcc_netbsd_386.c
+++ b/src/runtime/cgo/gcc_netbsd_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <pthread.h>
 #include <signal.h>
@@ -55,6 +57,7 @@ static void*
 threadentry(void *v)
 {
 	ThreadStart ts;
+	stack_t ss;
 
 	ts = *(ThreadStart*)v;
 	free(v);
@@ -64,6 +67,17 @@ threadentry(void *v)
 	 */
 	setg_gcc((void*)ts.g);
 
+	// On NetBSD, a new thread inherits the signal stack of the
+	// creating thread.  That confuses minit, so we remove that
+	// signal stack here before calling the regular mstart.  It's
+	// a bit baroque to remove a signal stack here only to add one
+	// in minit, but it's a simple change that keeps NetBSD
+	// working like other OS's.  At this point all signals are
+	// blocked, so there is no race.
+	memset(&ss, 0, sizeof ss);
+	ss.ss_flags = SS_DISABLE;
+	sigaltstack(&ss, nil);
+
 	crosscall_386(ts.fn);
 	return nil;
 }
diff --git a/src/runtime/cgo/gcc_netbsd_amd64.c b/src/runtime/cgo/gcc_netbsd_amd64.c
index 8f64650..00e0667 100644
--- a/src/runtime/cgo/gcc_netbsd_amd64.c
+++ b/src/runtime/cgo/gcc_netbsd_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <pthread.h>
 #include <signal.h>
@@ -56,6 +58,7 @@ static void*
 threadentry(void *v)
 {
 	ThreadStart ts;
+	stack_t ss;
 
 	ts = *(ThreadStart*)v;
 	free(v);
@@ -65,6 +68,17 @@ threadentry(void *v)
 	 */
 	setg_gcc((void*)ts.g);
 
+	// On NetBSD, a new thread inherits the signal stack of the
+	// creating thread.  That confuses minit, so we remove that
+	// signal stack here before calling the regular mstart.  It's
+	// a bit baroque to remove a signal stack here only to add one
+	// in minit, but it's a simple change that keeps NetBSD
+	// working like other OS's.  At this point all signals are
+	// blocked, so there is no race.
+	memset(&ss, 0, sizeof ss);
+	ss.ss_flags = SS_DISABLE;
+	sigaltstack(&ss, nil);
+
 	crosscall_amd64(ts.fn);
 	return nil;
 }
diff --git a/src/runtime/cgo/gcc_netbsd_arm.c b/src/runtime/cgo/gcc_netbsd_arm.c
index 7a98c0d..32bc85b 100644
--- a/src/runtime/cgo/gcc_netbsd_arm.c
+++ b/src/runtime/cgo/gcc_netbsd_arm.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <pthread.h>
 #include <signal.h>
@@ -57,10 +59,22 @@ static void*
 threadentry(void *v)
 {
 	ThreadStart ts;
+	stack_t ss;
 
 	ts = *(ThreadStart*)v;
 	free(v);
 
+	// On NetBSD, a new thread inherits the signal stack of the
+	// creating thread.  That confuses minit, so we remove that
+	// signal stack here before calling the regular mstart.  It's
+	// a bit baroque to remove a signal stack here only to add one
+	// in minit, but it's a simple change that keeps NetBSD
+	// working like other OS's.  At this point all signals are
+	// blocked, so there is no race.
+	memset(&ss, 0, sizeof ss);
+	ss.ss_flags = SS_DISABLE;
+	sigaltstack(&ss, nil);
+
 	crosscall_arm1(ts.fn, setg_gcc, (void*)ts.g);
 	return nil;
 }
diff --git a/src/runtime/cgo/gcc_openbsd_386.c b/src/runtime/cgo/gcc_openbsd_386.c
index c4be9a0..5f6d4cb 100644
--- a/src/runtime/cgo/gcc_openbsd_386.c
+++ b/src/runtime/cgo/gcc_openbsd_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <dlfcn.h>
 #include <errno.h>
diff --git a/src/runtime/cgo/gcc_openbsd_amd64.c b/src/runtime/cgo/gcc_openbsd_amd64.c
index 8522cd4..4226567 100644
--- a/src/runtime/cgo/gcc_openbsd_amd64.c
+++ b/src/runtime/cgo/gcc_openbsd_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <sys/types.h>
 #include <dlfcn.h>
 #include <errno.h>
diff --git a/src/runtime/cgo/gcc_setenv.c b/src/runtime/cgo/gcc_setenv.c
index ca29dcb..c976ac3 100644
--- a/src/runtime/cgo/gcc_setenv.c
+++ b/src/runtime/cgo/gcc_setenv.c
@@ -2,6 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
 // +build darwin dragonfly freebsd linux netbsd openbsd solaris
 
 #include "libcgo.h"
diff --git a/src/runtime/cgo/gcc_signal_darwin_armx.c b/src/runtime/cgo/gcc_signal_darwin_armx.c
index e36fe26..295c562 100644
--- a/src/runtime/cgo/gcc_signal_darwin_armx.c
+++ b/src/runtime/cgo/gcc_signal_darwin_armx.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // Emulation of the Unix signal SIGSEGV.
 //
 // On iOS, Go tests and apps under development are run by lldb.
diff --git a/src/runtime/cgo/gcc_signal_darwin_lldb.c b/src/runtime/cgo/gcc_signal_darwin_lldb.c
index b26315f..edb55f3 100644
--- a/src/runtime/cgo/gcc_signal_darwin_lldb.c
+++ b/src/runtime/cgo/gcc_signal_darwin_lldb.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 // +build !lldb
 // +build darwin
 // +build arm arm64
diff --git a/src/runtime/cgo/gcc_solaris_amd64.c b/src/runtime/cgo/gcc_solaris_amd64.c
index 98a1a8b..5a01e08 100644
--- a/src/runtime/cgo/gcc_solaris_amd64.c
+++ b/src/runtime/cgo/gcc_solaris_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include <pthread.h>
 #include <string.h>
 #include <signal.h>
diff --git a/src/runtime/cgo/gcc_util.c b/src/runtime/cgo/gcc_util.c
index 143734e..d5efec3 100644
--- a/src/runtime/cgo/gcc_util.c
+++ b/src/runtime/cgo/gcc_util.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #include "libcgo.h"
 
 /* Stub for calling malloc from Go */
diff --git a/src/runtime/cgo/gcc_windows_386.c b/src/runtime/cgo/gcc_windows_386.c
index acd038c..e02991a 100644
--- a/src/runtime/cgo/gcc_windows_386.c
+++ b/src/runtime/cgo/gcc_windows_386.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <process.h>
diff --git a/src/runtime/cgo/gcc_windows_amd64.c b/src/runtime/cgo/gcc_windows_amd64.c
index ce7e06b..1b3e8e3 100644
--- a/src/runtime/cgo/gcc_windows_amd64.c
+++ b/src/runtime/cgo/gcc_windows_amd64.c
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build cgo
+
 #define WIN64_LEAN_AND_MEAN
 #include <windows.h>
 #include <process.h>
diff --git a/src/runtime/cgocall.go b/src/runtime/cgocall.go
index 210d186..66115fd 100644
--- a/src/runtime/cgocall.go
+++ b/src/runtime/cgocall.go
@@ -467,6 +467,14 @@ func cgoCheckArg(t *_type, p unsafe.Pointer, indir, top bool, msg string) {
 			cgoCheckArg(st.elem, p, true, false, msg)
 			p = add(p, st.elem.size)
 		}
+	case kindString:
+		ss := (*stringStruct)(p)
+		if !cgoIsGoPointer(ss.str) {
+			return
+		}
+		if !top {
+			panic(errorString(msg))
+		}
 	case kindStruct:
 		st := (*structtype)(unsafe.Pointer(t))
 		if !indir {
diff --git a/src/runtime/crash_cgo_test.go b/src/runtime/crash_cgo_test.go
index 92b4f0c..d7b367f 100644
--- a/src/runtime/crash_cgo_test.go
+++ b/src/runtime/crash_cgo_test.go
@@ -137,6 +137,10 @@ func TestCgoExecSignalMask(t *testing.T) {
 
 func TestEnsureDropM(t *testing.T) {
 	// Test for issue 13881.
+	switch runtime.GOOS {
+	case "windows", "plan9":
+		t.Skipf("skipping dropm test on %s", runtime.GOOS)
+	}
 	got := runTestProg(t, "testprogcgo", "EnsureDropM")
 	want := "OK\n"
 	if got != want {
diff --git a/src/runtime/crash_unix_test.go b/src/runtime/crash_unix_test.go
index a7af7ef..5284a37 100644
--- a/src/runtime/crash_unix_test.go
+++ b/src/runtime/crash_unix_test.go
@@ -136,6 +136,10 @@ func loop(i int, c chan bool) {
 
 func TestSignalExitStatus(t *testing.T) {
 	testenv.MustHaveGoBuild(t)
+	switch runtime.GOOS {
+	case "netbsd":
+		t.Skip("skipping on NetBSD; see https://golang.org/issue/14063")
+	}
 	exe, err := buildTestProg(t, "testprog")
 	if err != nil {
 		t.Fatal(err)
diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go
index 6a4eae6..5400c1d 100644
--- a/src/runtime/export_test.go
+++ b/src/runtime/export_test.go
@@ -163,3 +163,11 @@ var TestingAssertE2I2GC = &testingAssertE2I2GC
 var TestingAssertE2T2GC = &testingAssertE2T2GC
 
 var ForceGCPeriod = &forcegcperiod
+
+// SetTracebackEnv is like runtime/debug.SetTraceback, but it raises
+// the "environment" traceback level, so later calls to
+// debug.SetTraceback (e.g., from testing timeouts) can't lower it.
+func SetTracebackEnv(level string) {
+	setTraceback(level)
+	traceback_env = traceback_cache
+}
diff --git a/src/runtime/futex_test.go b/src/runtime/futex_test.go
index b85249a..8504396 100644
--- a/src/runtime/futex_test.go
+++ b/src/runtime/futex_test.go
@@ -13,6 +13,8 @@ package runtime_test
 
 import (
 	"runtime"
+	"sync"
+	"sync/atomic"
 	"testing"
 	"time"
 )
@@ -21,12 +23,12 @@ type futexsleepTest struct {
 	mtx uint32
 	ns  int64
 	msg string
-	ch  chan futexsleepTest
+	ch  chan *futexsleepTest
 }
 
 var futexsleepTests = []futexsleepTest{
-	beforeY2038: {mtx: 0, ns: 86400 * 1e9, msg: "before the year 2038", ch: make(chan futexsleepTest, 1)},
-	afterY2038:  {mtx: 0, ns: (1<<31 + 100) * 1e9, msg: "after the year 2038", ch: make(chan futexsleepTest, 1)},
+	beforeY2038: {mtx: 0, ns: 86400 * 1e9, msg: "before the year 2038"},
+	afterY2038:  {mtx: 0, ns: (1<<31 + 100) * 1e9, msg: "after the year 2038"},
 }
 
 const (
@@ -42,12 +44,18 @@ func TestFutexsleep(t *testing.T) {
 	}
 
 	start := time.Now()
-	for _, tt := range futexsleepTests {
-		go func(tt futexsleepTest) {
+	var wg sync.WaitGroup
+	for i := range futexsleepTests {
+		tt := &futexsleepTests[i]
+		tt.mtx = 0
+		tt.ch = make(chan *futexsleepTest, 1)
+		wg.Add(1)
+		go func(tt *futexsleepTest) {
 			runtime.Entersyscall(0)
-			runtime.Futexsleep(&tt.mtx, tt.mtx, tt.ns)
+			runtime.Futexsleep(&tt.mtx, 0, tt.ns)
 			runtime.Exitsyscall(0)
 			tt.ch <- tt
+			wg.Done()
 		}(tt)
 	}
 loop:
@@ -71,7 +79,10 @@ loop:
 			break loop
 		}
 	}
-	for _, tt := range futexsleepTests {
+	for i := range futexsleepTests {
+		tt := &futexsleepTests[i]
+		atomic.StoreUint32(&tt.mtx, 1)
 		runtime.Futexwakeup(&tt.mtx, 1)
 	}
+	wg.Wait()
 }
diff --git a/src/runtime/heapdump.go b/src/runtime/heapdump.go
index dfceba3..4d1da1c 100644
--- a/src/runtime/heapdump.go
+++ b/src/runtime/heapdump.go
@@ -639,7 +639,7 @@ func dumpmemprof() {
 	}
 }
 
-var dumphdr = []byte("go1.5 heap dump\n")
+var dumphdr = []byte("go1.6 heap dump\n")
 
 func mdump() {
 	// make sure we're done sweeping
diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go
index d4487ee..b520c68 100644
--- a/src/runtime/malloc.go
+++ b/src/runtime/malloc.go
@@ -455,7 +455,11 @@ func (h *mheap) sysAlloc(n uintptr) unsafe.Pointer {
 	}
 
 	if p < h.arena_start || uintptr(p)+p_size-h.arena_start >= _MaxArena32 {
-		print("runtime: memory allocated by OS (", p, ") not in usable range [", hex(h.arena_start), ",", hex(h.arena_start+_MaxArena32), ")\n")
+		top := ^uintptr(0)
+		if top-h.arena_start > _MaxArena32 {
+			top = h.arena_start + _MaxArena32
+		}
+		print("runtime: memory allocated by OS (", hex(p), ") not in usable range [", hex(h.arena_start), ",", hex(top), ")\n")
 		sysFree(unsafe.Pointer(p), p_size, &memstats.heap_sys)
 		return nil
 	}
diff --git a/src/runtime/memclr_amd64.s b/src/runtime/memclr_amd64.s
index 5e78037..c257d59 100644
--- a/src/runtime/memclr_amd64.s
+++ b/src/runtime/memclr_amd64.s
@@ -65,40 +65,40 @@ loop:
 	JMP	tail
 
 loop_preheader_avx2:
-	VPXOR X0, X0, X0
+	VPXOR Y0, Y0, Y0
 	// For smaller sizes MOVNTDQ may be faster or slower depending on hardware.
 	// For larger sizes it is always faster, even on dual Xeons with 30M cache.
 	// TODO take into account actual LLC size. E. g. glibc uses LLC size/2.
 	CMPQ    BX, $0x2000000
 	JAE     loop_preheader_avx2_huge
 loop_avx2:
-	MOVHDU	X0, 0(DI)
-	MOVHDU	X0, 32(DI)
-	MOVHDU	X0, 64(DI)
-	MOVHDU	X0, 96(DI)
+	VMOVDQU	Y0, 0(DI)
+	VMOVDQU	Y0, 32(DI)
+	VMOVDQU	Y0, 64(DI)
+	VMOVDQU	Y0, 96(DI)
 	SUBQ	$128, BX
 	ADDQ	$128, DI
 	CMPQ	BX, $128
 	JAE	loop_avx2
-	MOVHDU  X0, -32(DI)(BX*1)
-	MOVHDU  X0, -64(DI)(BX*1)
-	MOVHDU  X0, -96(DI)(BX*1)
-	MOVHDU  X0, -128(DI)(BX*1)
+	VMOVDQU  Y0, -32(DI)(BX*1)
+	VMOVDQU  Y0, -64(DI)(BX*1)
+	VMOVDQU  Y0, -96(DI)(BX*1)
+	VMOVDQU  Y0, -128(DI)(BX*1)
 	VZEROUPPER
 	RET
 loop_preheader_avx2_huge:
 	// Align to 32 byte boundary
-	MOVHDU  X0, 0(DI)
+	VMOVDQU  Y0, 0(DI)
 	MOVQ	DI, SI
 	ADDQ	$32, DI
 	ANDQ	$~31, DI
 	SUBQ	DI, SI
 	ADDQ	SI, BX
 loop_avx2_huge:
-	MOVNTHD	X0, 0(DI)
-	MOVNTHD	X0, 32(DI)
-	MOVNTHD	X0, 64(DI)
-	MOVNTHD	X0, 96(DI)
+	VMOVNTDQ	Y0, 0(DI)
+	VMOVNTDQ	Y0, 32(DI)
+	VMOVNTDQ	Y0, 64(DI)
+	VMOVNTDQ	Y0, 96(DI)
 	SUBQ	$128, BX
 	ADDQ	$128, DI
 	CMPQ	BX, $128
@@ -108,10 +108,10 @@ loop_avx2_huge:
 	// should be used in conjunction with MOVNTDQ instructions..."
 	// [1] 64-ia-32-architectures-software-developer-manual-325462.pdf
 	SFENCE
-	MOVHDU  X0, -32(DI)(BX*1)
-	MOVHDU  X0, -64(DI)(BX*1)
-	MOVHDU  X0, -96(DI)(BX*1)
-	MOVHDU  X0, -128(DI)(BX*1)
+	VMOVDQU  Y0, -32(DI)(BX*1)
+	VMOVDQU  Y0, -64(DI)(BX*1)
+	VMOVDQU  Y0, -96(DI)(BX*1)
+	VMOVDQU  Y0, -128(DI)(BX*1)
 	VZEROUPPER
 	RET
 
diff --git a/src/runtime/mgc.go b/src/runtime/mgc.go
index c09f704..94301c6 100644
--- a/src/runtime/mgc.go
+++ b/src/runtime/mgc.go
@@ -629,7 +629,7 @@ func (c *gcControllerState) findRunnableGCWorker(_p_ *p) *g {
 	if gcBlackenEnabled == 0 {
 		throw("gcControllerState.findRunnable: blackening not enabled")
 	}
-	if _p_.gcBgMarkWorker == nil {
+	if _p_.gcBgMarkWorker == 0 {
 		// The mark worker associated with this P is blocked
 		// performing a mark transition. We can't run it
 		// because it may be on some other run or wait queue.
@@ -711,7 +711,7 @@ func (c *gcControllerState) findRunnableGCWorker(_p_ *p) *g {
 	}
 
 	// Run the background mark worker
-	gp := _p_.gcBgMarkWorker
+	gp := _p_.gcBgMarkWorker.ptr()
 	casgstatus(gp, _Gwaiting, _Grunnable)
 	if trace.enabled {
 		traceGoUnpark(gp, 0)
@@ -1121,6 +1121,10 @@ top:
 		// finalizers have been scanned.
 		work.finalizersDone = true
 
+		// Disable assists and background workers. We must do
+		// this before waking blocked assists.
+		atomic.Store(&gcBlackenEnabled, 0)
+
 		// Flush the gcWork caches. This must be done before
 		// endCycle since endCycle depends on statistics kept
 		// in these caches.
@@ -1321,7 +1325,7 @@ func gcBgMarkStartWorkers() {
 		if p == nil || p.status == _Pdead {
 			break
 		}
-		if p.gcBgMarkWorker == nil {
+		if p.gcBgMarkWorker == 0 {
 			go gcBgMarkWorker(p)
 			notetsleepg(&work.bgMarkReady, -1)
 			noteclear(&work.bgMarkReady)
@@ -1345,15 +1349,17 @@ func gcBgMarkPrepare() {
 	work.nwait = ^uint32(0)
 }
 
-func gcBgMarkWorker(p *p) {
-	// Register this G as the background mark worker for p.
-	casgp := func(gpp **g, old, new *g) bool {
-		return casp((*unsafe.Pointer)(unsafe.Pointer(gpp)), unsafe.Pointer(old), unsafe.Pointer(new))
+func gcBgMarkWorker(_p_ *p) {
+	type parkInfo struct {
+		m      *m // Release this m on park.
+		attach *p // If non-nil, attach to this p on park.
 	}
+	var park parkInfo
 
 	gp := getg()
-	mp := acquirem()
-	owned := casgp(&p.gcBgMarkWorker, nil, gp)
+	park.m = acquirem()
+	park.attach = _p_
+	// Inform gcBgMarkStartWorkers that this worker is ready.
 	// After this point, the background mark worker is scheduled
 	// cooperatively by gcController.findRunnable. Hence, it must
 	// never be preempted, as this would put it into _Grunnable
@@ -1361,33 +1367,51 @@ func gcBgMarkWorker(p *p) {
 	// is set, this puts itself into _Gwaiting to be woken up by
 	// gcController.findRunnable at the appropriate time.
 	notewakeup(&work.bgMarkReady)
-	if !owned {
-		// A sleeping worker came back and reassociated with
-		// the P. That's fine.
-		releasem(mp)
-		return
-	}
 
 	for {
 		// Go to sleep until woken by gcContoller.findRunnable.
 		// We can't releasem yet since even the call to gopark
 		// may be preempted.
-		gopark(func(g *g, mp unsafe.Pointer) bool {
-			releasem((*m)(mp))
+		gopark(func(g *g, parkp unsafe.Pointer) bool {
+			park := (*parkInfo)(parkp)
+
+			// The worker G is no longer running, so it's
+			// now safe to allow preemption.
+			releasem(park.m)
+
+			// If the worker isn't attached to its P,
+			// attach now. During initialization and after
+			// a phase change, the worker may have been
+			// running on a different P. As soon as we
+			// attach, the owner P may schedule the
+			// worker, so this must be done after the G is
+			// stopped.
+			if park.attach != nil {
+				p := park.attach
+				park.attach = nil
+				// cas the worker because we may be
+				// racing with a new worker starting
+				// on this P.
+				if !p.gcBgMarkWorker.cas(0, guintptr(unsafe.Pointer(g))) {
+					// The P got a new worker.
+					// Exit this worker.
+					return false
+				}
+			}
 			return true
-		}, unsafe.Pointer(mp), "GC worker (idle)", traceEvGoBlock, 0)
+		}, noescape(unsafe.Pointer(&park)), "GC worker (idle)", traceEvGoBlock, 0)
 
 		// Loop until the P dies and disassociates this
-		// worker. (The P may later be reused, in which case
-		// it will get a new worker.)
-		if p.gcBgMarkWorker != gp {
+		// worker (the P may later be reused, in which case
+		// it will get a new worker) or we failed to associate.
+		if _p_.gcBgMarkWorker.ptr() != gp {
 			break
 		}
 
 		// Disable preemption so we can use the gcw. If the
 		// scheduler wants to preempt us, we'll stop draining,
 		// dispose the gcw, and then preempt.
-		mp = acquirem()
+		park.m = acquirem()
 
 		if gcBlackenEnabled == 0 {
 			throw("gcBgMarkWorker: blackening not enabled")
@@ -1401,13 +1425,13 @@ func gcBgMarkWorker(p *p) {
 			throw("work.nwait was > work.nproc")
 		}
 
-		switch p.gcMarkWorkerMode {
+		switch _p_.gcMarkWorkerMode {
 		default:
 			throw("gcBgMarkWorker: unexpected gcMarkWorkerMode")
 		case gcMarkWorkerDedicatedMode:
-			gcDrain(&p.gcw, gcDrainNoBlock|gcDrainFlushBgCredit)
+			gcDrain(&_p_.gcw, gcDrainNoBlock|gcDrainFlushBgCredit)
 		case gcMarkWorkerFractionalMode, gcMarkWorkerIdleMode:
-			gcDrain(&p.gcw, gcDrainUntilPreempt|gcDrainFlushBgCredit)
+			gcDrain(&_p_.gcw, gcDrainUntilPreempt|gcDrainFlushBgCredit)
 		}
 
 		// If we are nearing the end of mark, dispose
@@ -1417,12 +1441,12 @@ func gcBgMarkWorker(p *p) {
 		// no workers and no work while we have this
 		// cached, and before we compute done.
 		if gcBlackenPromptly {
-			p.gcw.dispose()
+			_p_.gcw.dispose()
 		}
 
 		// Account for time.
 		duration := nanotime() - startTime
-		switch p.gcMarkWorkerMode {
+		switch _p_.gcMarkWorkerMode {
 		case gcMarkWorkerDedicatedMode:
 			atomic.Xaddint64(&gcController.dedicatedMarkTime, duration)
 			atomic.Xaddint64(&gcController.dedicatedMarkWorkersNeeded, 1)
@@ -1437,7 +1461,7 @@ func gcBgMarkWorker(p *p) {
 		// of work?
 		incnwait := atomic.Xadd(&work.nwait, +1)
 		if incnwait > work.nproc {
-			println("runtime: p.gcMarkWorkerMode=", p.gcMarkWorkerMode,
+			println("runtime: p.gcMarkWorkerMode=", _p_.gcMarkWorkerMode,
 				"work.nwait=", incnwait, "work.nproc=", work.nproc)
 			throw("work.nwait > work.nproc")
 		}
@@ -1449,21 +1473,19 @@ func gcBgMarkWorker(p *p) {
 			// as the worker for this P so
 			// findRunnableGCWorker doesn't try to
 			// schedule it.
-			p.gcBgMarkWorker = nil
-			releasem(mp)
+			_p_.gcBgMarkWorker.set(nil)
+			releasem(park.m)
 
 			gcMarkDone()
 
-			// Disable preemption and reassociate with the P.
+			// Disable preemption and prepare to reattach
+			// to the P.
 			//
 			// We may be running on a different P at this
-			// point, so this has to be done carefully.
-			mp = acquirem()
-			if !casgp(&p.gcBgMarkWorker, nil, gp) {
-				// The P got a new worker.
-				releasem(mp)
-				break
-			}
+			// point, so we can't reattach until this G is
+			// parked.
+			park.m = acquirem()
+			park.attach = _p_
 		}
 	}
 }
diff --git a/src/runtime/mgcmark.go b/src/runtime/mgcmark.go
index 52545af..eac45ec 100644
--- a/src/runtime/mgcmark.go
+++ b/src/runtime/mgcmark.go
@@ -491,7 +491,8 @@ retry:
 }
 
 // gcWakeAllAssists wakes all currently blocked assists. This is used
-// at the end of a GC cycle.
+// at the end of a GC cycle. gcBlackenEnabled must be false to prevent
+// new assists from going to sleep after this point.
 func gcWakeAllAssists() {
 	lock(&work.assistQueue.lock)
 	injectglist(work.assistQueue.head.ptr())
diff --git a/src/runtime/mprof.go b/src/runtime/mprof.go
index eb7231a..fc73bbf 100644
--- a/src/runtime/mprof.go
+++ b/src/runtime/mprof.go
@@ -522,34 +522,51 @@ func ThreadCreateProfile(p []StackRecord) (n int, ok bool) {
 // Most clients should use the runtime/pprof package instead
 // of calling GoroutineProfile directly.
 func GoroutineProfile(p []StackRecord) (n int, ok bool) {
+	gp := getg()
+
+	isOK := func(gp1 *g) bool {
+		// Checking isSystemGoroutine here makes GoroutineProfile
+		// consistent with both NumGoroutine and Stack.
+		return gp1 != gp && readgstatus(gp1) != _Gdead && !isSystemGoroutine(gp1)
+	}
+
+	stopTheWorld("profile")
+
+	n = 1
+	for _, gp1 := range allgs {
+		if isOK(gp1) {
+			n++
+		}
+	}
 
-	n = NumGoroutine()
 	if n <= len(p) {
-		gp := getg()
-		stopTheWorld("profile")
-
-		n = NumGoroutine()
-		if n <= len(p) {
-			ok = true
-			r := p
-			sp := getcallersp(unsafe.Pointer(&p))
-			pc := getcallerpc(unsafe.Pointer(&p))
-			systemstack(func() {
-				saveg(pc, sp, gp, &r[0])
-			})
-			r = r[1:]
-			for _, gp1 := range allgs {
-				if gp1 == gp || readgstatus(gp1) == _Gdead {
-					continue
+		ok = true
+		r := p
+
+		// Save current goroutine.
+		sp := getcallersp(unsafe.Pointer(&p))
+		pc := getcallerpc(unsafe.Pointer(&p))
+		systemstack(func() {
+			saveg(pc, sp, gp, &r[0])
+		})
+		r = r[1:]
+
+		// Save other goroutines.
+		for _, gp1 := range allgs {
+			if isOK(gp1) {
+				if len(r) == 0 {
+					// Should be impossible, but better to return a
+					// truncated profile than to crash the entire process.
+					break
 				}
 				saveg(^uintptr(0), ^uintptr(0), gp1, &r[0])
 				r = r[1:]
 			}
 		}
-
-		startTheWorld()
 	}
 
+	startTheWorld()
+
 	return n, ok
 }
 
diff --git a/src/runtime/os1_darwin.go b/src/runtime/os1_darwin.go
index b5a1f59..5c00407 100644
--- a/src/runtime/os1_darwin.go
+++ b/src/runtime/os1_darwin.go
@@ -147,8 +147,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, &mp.sigmask, nil)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
 }
 
 //go:nosplit
@@ -162,20 +162,25 @@ func minit() {
 	// Initialize signal handling.
 	_g_ := getg()
 
-	var st stackt
-	sigaltstack(nil, &st)
-	if st.ss_flags&_SS_DISABLE != 0 {
-		signalstack(&_g_.m.gsignal.stack)
-		_g_.m.newSigstack = true
-	} else {
-		// Use existing signal stack.
-		stsp := uintptr(unsafe.Pointer(st.ss_sp))
-		_g_.m.gsignal.stack.lo = stsp
-		_g_.m.gsignal.stack.hi = stsp + st.ss_size
-		_g_.m.gsignal.stackguard0 = stsp + _StackGuard
-		_g_.m.gsignal.stackguard1 = stsp + _StackGuard
-		_g_.m.gsignal.stackAlloc = st.ss_size
-		_g_.m.newSigstack = false
+	// The alternate signal stack is buggy on arm and arm64.
+	// The signal handler handles it directly.
+	// The sigaltstack assembly function does nothing.
+	if GOARCH != "arm" && GOARCH != "arm64" {
+		var st stackt
+		sigaltstack(nil, &st)
+		if st.ss_flags&_SS_DISABLE != 0 {
+			signalstack(&_g_.m.gsignal.stack)
+			_g_.m.newSigstack = true
+		} else {
+			// Use existing signal stack.
+			stsp := uintptr(unsafe.Pointer(st.ss_sp))
+			_g_.m.gsignal.stack.lo = stsp
+			_g_.m.gsignal.stack.hi = stsp + st.ss_size
+			_g_.m.gsignal.stackguard0 = stsp + _StackGuard
+			_g_.m.gsignal.stackguard1 = stsp + _StackGuard
+			_g_.m.gsignal.stackAlloc = st.ss_size
+			_g_.m.newSigstack = false
+		}
 	}
 
 	// restore signal mask from m.sigmask and unblock essential signals
diff --git a/src/runtime/os1_dragonfly.go b/src/runtime/os1_dragonfly.go
index 59ffb80..bf3e1cc 100644
--- a/src/runtime/os1_dragonfly.go
+++ b/src/runtime/os1_dragonfly.go
@@ -123,8 +123,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, &mp.sigmask, nil)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
 }
 
 //go:nosplit
@@ -140,22 +140,17 @@ func minit() {
 	// m.procid is a uint64, but lwp_start writes an int32. Fix it up.
 	_g_.m.procid = uint64(*(*int32)(unsafe.Pointer(&_g_.m.procid)))
 
-	// Initialize signal handling
-	var st sigaltstackt
-	sigaltstack(nil, &st)
-	if st.ss_flags&_SS_DISABLE != 0 {
-		signalstack(&_g_.m.gsignal.stack)
-		_g_.m.newSigstack = true
-	} else {
-		// Use existing signal stack.
-		stsp := uintptr(unsafe.Pointer(st.ss_sp))
-		_g_.m.gsignal.stack.lo = stsp
-		_g_.m.gsignal.stack.hi = stsp + st.ss_size
-		_g_.m.gsignal.stackguard0 = stsp + _StackGuard
-		_g_.m.gsignal.stackguard1 = stsp + _StackGuard
-		_g_.m.gsignal.stackAlloc = st.ss_size
-		_g_.m.newSigstack = false
-	}
+	// Initialize signal handling.
+
+	// On DragonFly a thread created by pthread_create inherits
+	// the signal stack of the creating thread.  We always create
+	// a new signal stack here, to avoid having two Go threads
+	// using the same signal stack.  This breaks the case of a
+	// thread created in C that calls sigaltstack and then calls a
+	// Go function, because we will lose track of the C code's
+	// sigaltstack, but it's the best we can do.
+	signalstack(&_g_.m.gsignal.stack)
+	_g_.m.newSigstack = true
 
 	// restore signal mask from m.sigmask and unblock essential signals
 	nmask := _g_.m.sigmask
@@ -168,6 +163,7 @@ func minit() {
 }
 
 // Called from dropm to undo the effect of an minit.
+//go:nosplit
 func unminit() {
 	if getg().m.newSigstack {
 		signalstack(nil)
diff --git a/src/runtime/os1_freebsd.go b/src/runtime/os1_freebsd.go
index 05d1343..79d9954 100644
--- a/src/runtime/os1_freebsd.go
+++ b/src/runtime/os1_freebsd.go
@@ -126,8 +126,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, &mp.sigmask, nil)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
 }
 
 //go:nosplit
diff --git a/src/runtime/os1_linux.go b/src/runtime/os1_linux.go
index 747a1ac..b38cfc1 100644
--- a/src/runtime/os1_linux.go
+++ b/src/runtime/os1_linux.go
@@ -213,9 +213,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	smask := &mp.sigmask
-	rtsigprocmask(_SIG_SETMASK, smask, nil, int32(unsafe.Sizeof(*smask)))
+func msigrestore(sigmask sigset) {
+	rtsigprocmask(_SIG_SETMASK, &sigmask, nil, int32(unsafe.Sizeof(sigmask)))
 }
 
 //go:nosplit
diff --git a/src/runtime/os1_nacl.go b/src/runtime/os1_nacl.go
index 3af51b7..dab205d 100644
--- a/src/runtime/os1_nacl.go
+++ b/src/runtime/os1_nacl.go
@@ -22,7 +22,7 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
+func msigrestore(sigmask sigset) {
 }
 
 //go:nosplit
diff --git a/src/runtime/os1_netbsd.go b/src/runtime/os1_netbsd.go
index 79524aa..eab8eb8 100644
--- a/src/runtime/os1_netbsd.go
+++ b/src/runtime/os1_netbsd.go
@@ -104,7 +104,7 @@ func newosproc(mp *m, stk unsafe.Pointer) {
 	uc.uc_link = nil
 	uc.uc_sigmask = sigset_all
 
-	lwp_mcontext_init(&uc.uc_mcontext, stk, mp, mp.g0, funcPC(mstart))
+	lwp_mcontext_init(&uc.uc_mcontext, stk, mp, mp.g0, funcPC(netbsdMstart))
 
 	ret := lwp_create(unsafe.Pointer(&uc), 0, unsafe.Pointer(&mp.procid))
 	if ret < 0 {
@@ -113,6 +113,19 @@ func newosproc(mp *m, stk unsafe.Pointer) {
 	}
 }
 
+// netbsdMStart is the function call that starts executing a newly
+// created thread.  On NetBSD, a new thread inherits the signal stack
+// of the creating thread.  That confuses minit, so we remove that
+// signal stack here before calling the regular mstart.  It's a bit
+// baroque to remove a signal stack here only to add one in minit, but
+// it's a simple change that keeps NetBSD working like other OS's.
+// At this point all signals are blocked, so there is no race.
+//go:nosplit
+func netbsdMstart() {
+	signalstack(nil)
+	mstart()
+}
+
 func osinit() {
 	ncpu = getncpu()
 }
@@ -144,8 +157,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, &mp.sigmask, nil)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
 }
 
 //go:nosplit
@@ -159,22 +172,17 @@ func minit() {
 	_g_ := getg()
 	_g_.m.procid = uint64(lwp_self())
 
-	// Initialize signal handling
-	var st sigaltstackt
-	sigaltstack(nil, &st)
-	if st.ss_flags&_SS_DISABLE != 0 {
-		signalstack(&_g_.m.gsignal.stack)
-		_g_.m.newSigstack = true
-	} else {
-		// Use existing signal stack.
-		stsp := uintptr(unsafe.Pointer(st.ss_sp))
-		_g_.m.gsignal.stack.lo = stsp
-		_g_.m.gsignal.stack.hi = stsp + st.ss_size
-		_g_.m.gsignal.stackguard0 = stsp + _StackGuard
-		_g_.m.gsignal.stackguard1 = stsp + _StackGuard
-		_g_.m.gsignal.stackAlloc = st.ss_size
-		_g_.m.newSigstack = false
-	}
+	// Initialize signal handling.
+
+	// On NetBSD a thread created by pthread_create inherits the
+	// signal stack of the creating thread.  We always create a
+	// new signal stack here, to avoid having two Go threads using
+	// the same signal stack.  This breaks the case of a thread
+	// created in C that calls sigaltstack and then calls a Go
+	// function, because we will lose track of the C code's
+	// sigaltstack, but it's the best we can do.
+	signalstack(&_g_.m.gsignal.stack)
+	_g_.m.newSigstack = true
 
 	// restore signal mask from m.sigmask and unblock essential signals
 	nmask := _g_.m.sigmask
diff --git a/src/runtime/os1_openbsd.go b/src/runtime/os1_openbsd.go
index 7e1aa33..a6cefa2 100644
--- a/src/runtime/os1_openbsd.go
+++ b/src/runtime/os1_openbsd.go
@@ -156,8 +156,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, mp.sigmask)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, sigmask)
 }
 
 //go:nosplit
diff --git a/src/runtime/os1_plan9.go b/src/runtime/os1_plan9.go
index 61ebc1d..7506d59 100644
--- a/src/runtime/os1_plan9.go
+++ b/src/runtime/os1_plan9.go
@@ -26,7 +26,7 @@ func mpreinit(mp *m) {
 func msigsave(mp *m) {
 }
 
-func msigrestore(mp *m) {
+func msigrestore(sigmask sigset) {
 }
 
 func sigblock() {
diff --git a/src/runtime/os1_windows.go b/src/runtime/os1_windows.go
index a59e9ec..a28e11e 100644
--- a/src/runtime/os1_windows.go
+++ b/src/runtime/os1_windows.go
@@ -391,7 +391,7 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
+func msigrestore(sigmask sigset) {
 }
 
 //go:nosplit
diff --git a/src/runtime/os2_dragonfly.go b/src/runtime/os2_dragonfly.go
index ccad82f..6ea2da0 100644
--- a/src/runtime/os2_dragonfly.go
+++ b/src/runtime/os2_dragonfly.go
@@ -6,7 +6,7 @@ package runtime
 
 const (
 	_NSIG        = 33
-	_SI_USER     = 0x10001
+	_SI_USER     = 0
 	_SS_DISABLE  = 4
 	_RLIMIT_AS   = 10
 	_SIG_BLOCK   = 1
diff --git a/src/runtime/os3_solaris.go b/src/runtime/os3_solaris.go
index 7d9ee5c..7bda07b 100644
--- a/src/runtime/os3_solaris.go
+++ b/src/runtime/os3_solaris.go
@@ -198,8 +198,8 @@ func msigsave(mp *m) {
 }
 
 //go:nosplit
-func msigrestore(mp *m) {
-	sigprocmask(_SIG_SETMASK, &mp.sigmask, nil)
+func msigrestore(sigmask sigset) {
+	sigprocmask(_SIG_SETMASK, &sigmask, nil)
 }
 
 //go:nosplit
diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go
index d32b315..7d677cb 100644
--- a/src/runtime/pprof/pprof.go
+++ b/src/runtime/pprof/pprof.go
@@ -567,6 +567,14 @@ var cpu struct {
 // StartCPUProfile enables CPU profiling for the current process.
 // While profiling, the profile will be buffered and written to w.
 // StartCPUProfile returns an error if profiling is already enabled.
+//
+// On Unix-like systems, StartCPUProfile does not work by default for
+// Go code built with -buildmode=c-archive or -buildmode=c-shared.
+// StartCPUProfile relies on the SIGPROF signal, but that signal will
+// be delivered to the main program's SIGPROF signal handler (if any)
+// not to the one used by Go.  To make it work, call os/signal.Notify
+// for syscall.SIGPROF, but note that doing so may break any profiling
+// being done by the main program.
 func StartCPUProfile(w io.Writer) error {
 	// The runtime routines allow a variable profiling rate,
 	// but in practice operating systems cannot trigger signals
diff --git a/src/runtime/pprof/pprof_test.go b/src/runtime/pprof/pprof_test.go
index c241b54..621d21d 100644
--- a/src/runtime/pprof/pprof_test.go
+++ b/src/runtime/pprof/pprof_test.go
@@ -23,14 +23,14 @@ import (
 	"unsafe"
 )
 
-func cpuHogger(f func()) {
+func cpuHogger(f func(), dur time.Duration) {
 	// We only need to get one 100 Hz clock tick, so we've got
-	// a 25x safety buffer.
+	// a large safety buffer.
 	// But do at least 500 iterations (which should take about 100ms),
 	// otherwise TestCPUProfileMultithreaded can fail if only one
-	// thread is scheduled during the 250ms period.
+	// thread is scheduled during the testing period.
 	t0 := time.Now()
-	for i := 0; i < 500 || time.Since(t0) < 250*time.Millisecond; i++ {
+	for i := 0; i < 500 || time.Since(t0) < dur; i++ {
 		f()
 	}
 }
@@ -68,20 +68,20 @@ func cpuHog2() {
 }
 
 func TestCPUProfile(t *testing.T) {
-	testCPUProfile(t, []string{"runtime/pprof_test.cpuHog1"}, func() {
-		cpuHogger(cpuHog1)
+	testCPUProfile(t, []string{"runtime/pprof_test.cpuHog1"}, func(dur time.Duration) {
+		cpuHogger(cpuHog1, dur)
 	})
 }
 
 func TestCPUProfileMultithreaded(t *testing.T) {
 	defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(2))
-	testCPUProfile(t, []string{"runtime/pprof_test.cpuHog1", "runtime/pprof_test.cpuHog2"}, func() {
+	testCPUProfile(t, []string{"runtime/pprof_test.cpuHog1", "runtime/pprof_test.cpuHog2"}, func(dur time.Duration) {
 		c := make(chan int)
 		go func() {
-			cpuHogger(cpuHog1)
+			cpuHogger(cpuHog1, dur)
 			c <- 1
 		}()
-		cpuHogger(cpuHog2)
+		cpuHogger(cpuHog2, dur)
 		<-c
 	})
 }
@@ -92,8 +92,8 @@ func parseProfile(t *testing.T, bytes []byte, f func(uintptr, []uintptr)) {
 	val := *(*[]uintptr)(unsafe.Pointer(&bytes))
 	val = val[:l]
 
-	// 5 for the header, 2 for the per-sample header on at least one sample, 3 for the trailer.
-	if l < 5+2+3 {
+	// 5 for the header, 3 for the trailer.
+	if l < 5+3 {
 		t.Logf("profile too short: %#x", val)
 		if badOS[runtime.GOOS] {
 			t.Skipf("ignoring failure on %s; see golang.org/issue/6047", runtime.GOOS)
@@ -120,7 +120,7 @@ func parseProfile(t *testing.T, bytes []byte, f func(uintptr, []uintptr)) {
 	}
 }
 
-func testCPUProfile(t *testing.T, need []string, f func()) {
+func testCPUProfile(t *testing.T, need []string, f func(dur time.Duration)) {
 	switch runtime.GOOS {
 	case "darwin":
 		switch runtime.GOARCH {
@@ -138,12 +138,55 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
 		t.Skip("skipping on plan9")
 	}
 
-	var prof bytes.Buffer
-	if err := StartCPUProfile(&prof); err != nil {
-		t.Fatal(err)
+	const maxDuration = 5 * time.Second
+	// If we're running a long test, start with a long duration
+	// because some of the tests (e.g., TestStackBarrierProfiling)
+	// are trying to make sure something *doesn't* happen.
+	duration := 5 * time.Second
+	if testing.Short() {
+		duration = 200 * time.Millisecond
+	}
+
+	// Profiling tests are inherently flaky, especially on a
+	// loaded system, such as when this test is running with
+	// several others under go test std. If a test fails in a way
+	// that could mean it just didn't run long enough, try with a
+	// longer duration.
+	for duration <= maxDuration {
+		var prof bytes.Buffer
+		if err := StartCPUProfile(&prof); err != nil {
+			t.Fatal(err)
+		}
+		f(duration)
+		StopCPUProfile()
+
+		if profileOk(t, need, prof, duration) {
+			return
+		}
+
+		duration *= 2
+		if duration <= maxDuration {
+			t.Logf("retrying with %s duration", duration)
+		}
+	}
+
+	if badOS[runtime.GOOS] {
+		t.Skipf("ignoring failure on %s; see golang.org/issue/6047", runtime.GOOS)
+		return
+	}
+	// Ignore the failure if the tests are running in a QEMU-based emulator,
+	// QEMU is not perfect at emulating everything.
+	// IN_QEMU environmental variable is set by some of the Go builders.
+	// IN_QEMU=1 indicates that the tests are running in QEMU. See issue 9605.
+	if os.Getenv("IN_QEMU") == "1" {
+		t.Skip("ignore the failure in QEMU; see golang.org/issue/9605")
+		return
 	}
-	f()
-	StopCPUProfile()
+	t.FailNow()
+}
+
+func profileOk(t *testing.T, need []string, prof bytes.Buffer, duration time.Duration) (ok bool) {
+	ok = true
 
 	// Check that profile is well formed and contains need.
 	have := make([]uintptr, len(need))
@@ -172,11 +215,18 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
 		// On some windows machines we end up with
 		// not enough samples due to coarse timer
 		// resolution. Let it go.
-		t.Skip("too few samples on Windows (golang.org/issue/10842)")
+		t.Log("too few samples on Windows (golang.org/issue/10842)")
+		return false
+	}
+
+	// Check that we got a reasonable number of samples.
+	if ideal := uintptr(duration * 100 / time.Second); samples == 0 || samples < ideal/4 {
+		t.Logf("too few samples; got %d, want at least %d, ideally %d", samples, ideal/4, ideal)
+		ok = false
 	}
 
 	if len(need) == 0 {
-		return
+		return ok
 	}
 
 	var total uintptr
@@ -184,9 +234,8 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
 		total += have[i]
 		t.Logf("%s: %d\n", name, have[i])
 	}
-	ok := true
 	if total == 0 {
-		t.Logf("no CPU profile samples collected")
+		t.Logf("no samples in expected functions")
 		ok = false
 	}
 	// We'd like to check a reasonable minimum, like
@@ -200,22 +249,7 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
 			ok = false
 		}
 	}
-
-	if !ok {
-		if badOS[runtime.GOOS] {
-			t.Skipf("ignoring failure on %s; see golang.org/issue/6047", runtime.GOOS)
-			return
-		}
-		// Ignore the failure if the tests are running in a QEMU-based emulator,
-		// QEMU is not perfect at emulating everything.
-		// IN_QEMU environmental variable is set by some of the Go builders.
-		// IN_QEMU=1 indicates that the tests are running in QEMU. See issue 9605.
-		if os.Getenv("IN_QEMU") == "1" {
-			t.Skip("ignore the failure in QEMU; see golang.org/issue/9605")
-			return
-		}
-		t.FailNow()
-	}
+	return ok
 }
 
 // Fork can hang if preempted with signals frequently enough (see issue 5517).
@@ -310,11 +344,7 @@ func TestGoroutineSwitch(t *testing.T) {
 
 // Test that profiling of division operations is okay, especially on ARM. See issue 6681.
 func TestMathBigDivide(t *testing.T) {
-	testCPUProfile(t, nil, func() {
-		duration := 5 * time.Second
-		if testing.Short() {
-			duration = 200 * time.Millisecond
-		}
+	testCPUProfile(t, nil, func(duration time.Duration) {
 		t := time.After(duration)
 		pi := new(big.Int)
 		for {
@@ -365,13 +395,9 @@ func TestStackBarrierProfiling(t *testing.T) {
 		return
 	}
 
-	testCPUProfile(t, nil, func() {
-		// This is long enough that we're likely to get one or
-		// two samples in stackBarrier.
-		duration := 5 * time.Second
-		if testing.Short() {
-			duration = 200 * time.Millisecond
-		}
+	testCPUProfile(t, nil, func(duration time.Duration) {
+		// In long mode, we're likely to get one or two
+		// samples in stackBarrier.
 		t := time.After(duration)
 		for {
 			deepStack(1000)
diff --git a/src/runtime/proc.go b/src/runtime/proc.go
index be1bb81..2bc3c92 100644
--- a/src/runtime/proc.go
+++ b/src/runtime/proc.go
@@ -1427,20 +1427,24 @@ func dropm() {
 	// After the call to setg we can only call nosplit functions
 	// with no pointer manipulation.
 	mp := getg().m
-	mnext := lockextra(true)
-	mp.schedlink.set(mnext)
 
 	// Block signals before unminit.
 	// Unminit unregisters the signal handling stack (but needs g on some systems).
 	// Setg(nil) clears g, which is the signal handler's cue not to run Go handlers.
 	// It's important not to try to handle a signal between those two steps.
+	sigmask := mp.sigmask
 	sigblock()
 	unminit()
+
+	mnext := lockextra(true)
+	mp.schedlink.set(mnext)
+
 	setg(nil)
-	msigrestore(mp)
 
 	// Commit the release of mp.
 	unlockextra(mp)
+
+	msigrestore(sigmask)
 }
 
 // A helper function for EnsureDropM.
@@ -1863,9 +1867,9 @@ stop:
 	// We have nothing to do. If we're in the GC mark phase, can
 	// safely scan and blacken objects, and have work to do, run
 	// idle-time marking rather than give up the P.
-	if _p_ := _g_.m.p.ptr(); gcBlackenEnabled != 0 && _p_.gcBgMarkWorker != nil && gcMarkWorkAvailable(_p_) {
+	if _p_ := _g_.m.p.ptr(); gcBlackenEnabled != 0 && _p_.gcBgMarkWorker != 0 && gcMarkWorkAvailable(_p_) {
 		_p_.gcMarkWorkerMode = gcMarkWorkerIdleMode
-		gp := _p_.gcBgMarkWorker
+		gp := _p_.gcBgMarkWorker.ptr()
 		casgstatus(gp, _Gwaiting, _Grunnable)
 		if trace.enabled {
 			traceGoUnpark(gp, 0)
@@ -3202,13 +3206,15 @@ func procresize(nprocs int32) *p {
 		}
 		// if there's a background worker, make it runnable and put
 		// it on the global queue so it can clean itself up
-		if p.gcBgMarkWorker != nil {
-			casgstatus(p.gcBgMarkWorker, _Gwaiting, _Grunnable)
+		if gp := p.gcBgMarkWorker.ptr(); gp != nil {
+			casgstatus(gp, _Gwaiting, _Grunnable)
 			if trace.enabled {
-				traceGoUnpark(p.gcBgMarkWorker, 0)
+				traceGoUnpark(gp, 0)
 			}
-			globrunqput(p.gcBgMarkWorker)
-			p.gcBgMarkWorker = nil
+			globrunqput(gp)
+			// This assignment doesn't race because the
+			// world is stopped.
+			p.gcBgMarkWorker.set(nil)
 		}
 		for i := range p.sudogbuf {
 			p.sudogbuf[i] = nil
diff --git a/src/runtime/proc_test.go b/src/runtime/proc_test.go
index f3e90bc..9e5960b 100644
--- a/src/runtime/proc_test.go
+++ b/src/runtime/proc_test.go
@@ -345,12 +345,27 @@ func TestNumGoroutine(t *testing.T) {
 	}
 
 	buf := make([]byte, 1<<20)
-	buf = buf[:runtime.Stack(buf, true)]
 
-	n := runtime.NumGoroutine()
+	// Try up to 10 times for a match before giving up.
+	// This is a fundamentally racy check but it's important
+	// to notice if NumGoroutine and Stack are _always_ out of sync.
+	for i := 0; ; i++ {
+		// Give goroutines about to exit a chance to exit.
+		// The NumGoroutine and Stack below need to see
+		// the same state of the world, so anything we can do
+		// to keep it quiet is good.
+		runtime.Gosched()
+
+		n := runtime.NumGoroutine()
+		buf = buf[:runtime.Stack(buf, true)]
 
-	if nstk := strings.Count(string(buf), "goroutine "); n != nstk {
-		t.Fatalf("NumGoroutine=%d, but found %d goroutines in stack dump", n, nstk)
+		nstk := strings.Count(string(buf), "goroutine ")
+		if n == nstk {
+			break
+		}
+		if i >= 10 {
+			t.Fatalf("NumGoroutine=%d, but found %d goroutines in stack dump: %s", n, nstk, buf)
+		}
 	}
 }
 
diff --git a/src/runtime/race/output_test.go b/src/runtime/race/output_test.go
index a9f9f0f..0c71a01 100644
--- a/src/runtime/race/output_test.go
+++ b/src/runtime/race/output_test.go
@@ -51,7 +51,10 @@ func TestOutput(t *testing.T) {
 			}
 			cmd.Env = append(cmd.Env, env)
 		}
-		cmd.Env = append(cmd.Env, "GORACE="+test.gorace)
+		cmd.Env = append(cmd.Env,
+			"GOMAXPROCS=1", // see comment in race_test.go
+			"GORACE="+test.gorace,
+		)
 		got, _ := cmd.CombinedOutput()
 		if !regexp.MustCompile(test.re).MatchString(string(got)) {
 			t.Fatalf("failed test case %v, expect:\n%v\ngot:\n%s",
diff --git a/src/runtime/race/race_test.go b/src/runtime/race/race_test.go
index 6898e74..748f338 100644
--- a/src/runtime/race/race_test.go
+++ b/src/runtime/race/race_test.go
@@ -155,7 +155,20 @@ func runTests() ([]byte, error) {
 		}
 		cmd.Env = append(cmd.Env, env)
 	}
-	cmd.Env = append(cmd.Env, `GORACE=suppress_equal_stacks=0 suppress_equal_addresses=0 exitcode=0`)
+	// We set GOMAXPROCS=1 to prevent test flakiness.
+	// There are two sources of flakiness:
+	// 1. Some tests rely on particular execution order.
+	//    If the order is different, race does not happen at all.
+	// 2. Ironically, ThreadSanitizer runtime contains a logical race condition
+	//    that can lead to false negatives if racy accesses happen literally at the same time.
+	// Tests used to work reliably in the good old days of GOMAXPROCS=1.
+	// So let's set it for now. A more reliable solution is to explicitly annotate tests
+	// with required execution order by means of a special "invisible" synchronization primitive
+	// (that's what is done for C++ ThreadSanitizer tests). This is issue #14119.
+	cmd.Env = append(cmd.Env,
+		"GOMAXPROCS=1",
+		"GORACE=suppress_equal_stacks=0 suppress_equal_addresses=0 exitcode=0",
+	)
 	return cmd.CombinedOutput()
 }
 
diff --git a/src/runtime/race/testdata/issue12225_test.go b/src/runtime/race/testdata/issue12225_test.go
index 3b0b8ec..0494493 100644
--- a/src/runtime/race/testdata/issue12225_test.go
+++ b/src/runtime/race/testdata/issue12225_test.go
@@ -4,9 +4,16 @@
 
 package race_test
 
+import "unsafe"
+
 // golang.org/issue/12225
 // The test is that this compiles at all.
 
+//go:noinline
+func convert(s string) []byte {
+	return []byte(s)
+}
+
 func issue12225() {
 	println(*(*int)(unsafe.Pointer(&convert("")[0])))
 	println(*(*int)(unsafe.Pointer(&[]byte("")[0])))
diff --git a/src/runtime/runtime2.go b/src/runtime/runtime2.go
index 54c4686..917fe89 100644
--- a/src/runtime/runtime2.go
+++ b/src/runtime/runtime2.go
@@ -388,7 +388,7 @@ type p struct {
 
 	// Per-P GC state
 	gcAssistTime     int64 // Nanoseconds in assistAlloc
-	gcBgMarkWorker   *g
+	gcBgMarkWorker   guintptr
 	gcMarkWorkerMode gcMarkWorkerMode
 
 	// gcw is this P's GC work buffer cache. The work buffer is
diff --git a/src/runtime/runtime_test.go b/src/runtime/runtime_test.go
index 75fc9bc..581f52b 100644
--- a/src/runtime/runtime_test.go
+++ b/src/runtime/runtime_test.go
@@ -12,6 +12,13 @@ import (
 	"unsafe"
 )
 
+func init() {
+	// We're testing the runtime, so make tracebacks show things
+	// in the runtime. This only raises the level, so it won't
+	// override GOTRACEBACK=crash from the user.
+	SetTracebackEnv("system")
+}
+
 var errf error
 
 func errfn() error {
@@ -301,3 +308,15 @@ func TestAppendSliceGrowth(t *testing.T) {
 		}
 	}
 }
+
+func TestGoroutineProfileTrivial(t *testing.T) {
+	n1, ok := GoroutineProfile(nil) // should fail, there's at least 1 goroutine
+	if n1 < 1 || ok {
+		t.Fatalf("GoroutineProfile(nil) = %d, %v, want >0, false", n1, ok)
+	}
+
+	n2, ok := GoroutineProfile(make([]StackRecord, n1))
+	if n2 != n1 || !ok {
+		t.Fatalf("GoroutineProfile(%d) = %d, %v, want %d, true", n1, n2, ok, n1)
+	}
+}
diff --git a/src/runtime/signal_darwin_arm64.go b/src/runtime/signal_darwin_arm64.go
index 8be0f4f..82f4a82 100644
--- a/src/runtime/signal_darwin_arm64.go
+++ b/src/runtime/signal_darwin_arm64.go
@@ -55,6 +55,7 @@ func (c *sigctxt) set_sp(x uint64)  { c.regs().sp = x }
 func (c *sigctxt) set_lr(x uint64)  { c.regs().lr = x }
 func (c *sigctxt) set_r28(x uint64) { c.regs().x[28] = x }
 
+func (c *sigctxt) set_sigcode(x uint64) { c.info.si_code = int32(x) }
 func (c *sigctxt) set_sigaddr(x uint64) {
 	c.info.si_addr = (*byte)(unsafe.Pointer(uintptr(x)))
 }
diff --git a/src/runtime/sys_dragonfly_amd64.s b/src/runtime/sys_dragonfly_amd64.s
index d1b94e1..4e4d793 100644
--- a/src/runtime/sys_dragonfly_amd64.s
+++ b/src/runtime/sys_dragonfly_amd64.s
@@ -51,6 +51,18 @@ TEXT runtime·lwp_start(SB),NOSPLIT,$0
 	MOVQ	R13, g_m(DI)
 	MOVQ	DI, g(CX)
 
+	// On DragonFly, a new thread inherits the signal stack of the
+	// creating thread.  That confuses minit, so we remove that
+	// signal stack here before calling the regular mstart.  It's
+	// a bit baroque to remove a signal stack here only to add one
+	// in minit, but it's a simple change that keeps DragonFly
+	// working like other OS's.  At this point all signals are
+	// blocked, so there is no race.
+	SUBQ	$8, SP
+	MOVQ	$0, 0(SP)
+	CALL	runtime·signalstack(SB)
+	ADDQ	$8, SP
+
 	CALL	runtime·stackcheck(SB)
 	CALL	runtime·mstart(SB)
 
diff --git a/src/runtime/sys_netbsd_amd64.s b/src/runtime/sys_netbsd_amd64.s
index 35a1b5d..fb21f11 100644
--- a/src/runtime/sys_netbsd_amd64.s
+++ b/src/runtime/sys_netbsd_amd64.s
@@ -245,11 +245,13 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
 	CALL	AX
 	RET
 
-TEXT runtime·sigtramp(SB),NOSPLIT,$24
+TEXT runtime·sigtramp(SB),NOSPLIT,$32
 	MOVQ	DI, 0(SP)   // signum
 	MOVQ	SI, 8(SP)   // info
 	MOVQ	DX, 16(SP)  // ctx
+	MOVQ	R15, 24(SP) // for sigreturn
 	CALL	runtime·sigtrampgo(SB)
+	MOVQ	24(SP), R15
 	RET
 
 TEXT runtime·mmap(SB),NOSPLIT,$0
diff --git a/src/runtime/testdata/testprogcgo/dropm.go b/src/runtime/testdata/testprogcgo/dropm.go
index 80ccdcc..75984ea 100644
--- a/src/runtime/testdata/testprogcgo/dropm.go
+++ b/src/runtime/testdata/testprogcgo/dropm.go
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// +build !plan9,!windows
+
 // Test that a sequence of callbacks from C to Go get the same m.
 // This failed to be true on arm and arm64, which was the root cause
 // of issue 13881.
diff --git a/src/runtime/trace.go b/src/runtime/trace.go
index 5895638..805c34f 100644
--- a/src/runtime/trace.go
+++ b/src/runtime/trace.go
@@ -529,7 +529,12 @@ func traceEvent(ev byte, skip int, args ...uint64) {
 			nstk = callers(skip, buf.stk[:])
 		} else if gp != nil {
 			gp = mp.curg
-			nstk = gcallers(gp, skip, buf.stk[:])
+			// This may happen when tracing a system call,
+			// so we must lock the stack.
+			if gcTryLockStackBarriers(gp) {
+				nstk = gcallers(gp, skip, buf.stk[:])
+				gcUnlockStackBarriers(gp)
+			}
 		}
 		if nstk > 0 {
 			nstk-- // skip runtime.goexit
diff --git a/src/syscall/syscall.go b/src/syscall/syscall.go
index 791bcbb..769e6b9 100644
--- a/src/syscall/syscall.go
+++ b/src/syscall/syscall.go
@@ -95,5 +95,8 @@ func (tv *Timeval) Nano() int64 {
 
 // use is a no-op, but the compiler cannot see that it is.
 // Calling use(p) ensures that p is kept live until that point.
+// This was needed until Go 1.6 to call syscall.Syscall correctly.
+// As of Go 1.6 the compiler handles that case automatically.
+// The uses and definition of use can be removed early in the Go 1.7 cycle.
 //go:noescape
 func use(p unsafe.Pointer)
diff --git a/src/text/template/doc.go b/src/text/template/doc.go
index 6c60091..df8c95f 100644
--- a/src/text/template/doc.go
+++ b/src/text/template/doc.go
@@ -64,7 +64,7 @@ space, horizontal tab, carriage return, and newline.
 Actions
 
 Here is the list of actions. "Arguments" and "pipelines" are evaluations of
-data, defined in detail below.
+data, defined in detail in the corresponding sections that follow.
 
 */
 //	{{/* a comment */}}
@@ -200,6 +200,8 @@ field of a struct, the function is not invoked automatically, but it
 can be used as a truth value for an if action and the like. To invoke
 it, use the call function, defined below.
 
+Pipelines
+
 A pipeline is a possibly chained sequence of "commands". A command is a simple
 value (argument) or a function or method call, possibly with multiple arguments:
 
@@ -217,8 +219,6 @@ value (argument) or a function or method call, possibly with multiple arguments:
 			function(Argument1, etc.)
 		Functions and function names are described below.
 
-Pipelines
-
 A pipeline may be "chained" by separating a sequence of commands with pipeline
 characters '|'. In a chained pipeline, the result of the each command is
 passed as the last argument of the following command. The output of the final
diff --git a/src/time/zoneinfo.go b/src/time/zoneinfo.go
index c8e53a2..c567439 100644
--- a/src/time/zoneinfo.go
+++ b/src/time/zoneinfo.go
@@ -21,7 +21,7 @@ type Location struct {
 	// To avoid the binary search through tx, keep a
 	// static one-element cache that gives the correct
 	// zone for the time when the Location was created.
-	// if cacheStart <= t <= cacheEnd,
+	// if cacheStart <= t < cacheEnd,
 	// lookup can return cacheZone.
 	// The units for cacheStart and cacheEnd are seconds
 	// since January 1, 1970 UTC, to match the argument
diff --git a/src/unsafe/unsafe.go b/src/unsafe/unsafe.go
index 752792f..33b3114 100644
--- a/src/unsafe/unsafe.go
+++ b/src/unsafe/unsafe.go
@@ -15,13 +15,160 @@ package unsafe
 type ArbitraryType int
 
 // Pointer represents a pointer to an arbitrary type.  There are four special operations
-// available for type Pointer that are not available for other types.
-//	1) A pointer value of any type can be converted to a Pointer.
-//	2) A Pointer can be converted to a pointer value of any type.
-//	3) A uintptr can be converted to a Pointer.
-//	4) A Pointer can be converted to a uintptr.
+// available for type Pointer that are not available for other types:
+//	- A pointer value of any type can be converted to a Pointer.
+//	- A Pointer can be converted to a pointer value of any type.
+//	- A uintptr can be converted to a Pointer.
+//	- A Pointer can be converted to a uintptr.
 // Pointer therefore allows a program to defeat the type system and read and write
 // arbitrary memory. It should be used with extreme care.
+//
+// The following patterns involving Pointer are valid.
+// Code not using these patterns is likely to be invalid today
+// or to become invalid in the future.
+// Even the valid patterns below come with important caveats.
+//
+// Running "go vet" can help find uses of Pointer that do not conform to these patterns,
+// but silence from "go vet" is not a guarantee that the code is valid.
+//
+// (1) Conversion of a *T1 to Pointer to *T2.
+//
+// Provided that T2 is no larger than T1 and that the two share an equivalent
+// memory layout, this conversion allows reinterpreting data of one type as
+// data of another type. An example is the implementation of
+// math.Float64bits:
+//
+//	func Float64bits(f float64) uint64 {
+//		return *(*uint64)(unsafe.Pointer(&f))
+//	}
+//
+// (2) Conversion of a Pointer to a uintptr (but not back to Pointer).
+//
+// Converting a Pointer to a uintptr produces the memory address of the value
+// pointed at, as an integer. The usual use for such a uintptr is to print it.
+//
+// Conversion of a uintptr back to Pointer is not valid in general.
+//
+// A uintptr is an integer, not a reference.
+// Converting a Pointer to a uintptr creates an integer value
+// with no pointer semantics.
+// Even if a uintptr holds the address of some object,
+// the garbage collector will not update that uintptr's value
+// if the object moves, nor will that uintptr keep the object
+// from being reclaimed.
+//
+// The remaining patterns enumerate the only valid conversions
+// from uintptr to Pointer.
+//
+// (3) Conversion of a Pointer to a uintptr and back, with arithmetic.
+//
+// If p points into an allocated object, it can be advanced through the object
+// by conversion to uintptr, addition of an offset, and conversion back to uintptr.
+//
+//	p = unsafe.Pointer(uintptr(p) + offset)
+//
+// The most common use of this pattern is to access fields in a struct
+// or elements of an array:
+//
+//	// equivalent to f := unsafe.Pointer(&s.f)
+//	f := unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + unsafe.Offsetof(s.f))
+//
+//	// equivalent to e := unsafe.Pointer(&x[i])
+//	e := unsafe.Pointer(uintptr(unsafe.Pointer(&x[0])) + i*unsafe.Sizeof(x[0]))
+//
+// It is valid both to add and to subtract offsets from a pointer in this way,
+// but the result must continue to point into the original allocated object.
+// Unlike in C, it is not valid to advance a pointer just beyond the end of
+// its original allocation:
+//
+//	// INVALID: end points outside allocated space.
+//	var s thing
+//	end = unsafe.Pointer(uintptr(unsafe.Pointer(&s)) + unsafe.Sizeof(s))
+//
+//	// INVALID: end points outside allocated space.
+//	b := make([]byte, n)
+//	end = unsafe.Pointer(uintptr(unsafe.Pointer(&b[0])) + uintptr(n))
+//
+// Note that both conversions must appear in the same expression, with only
+// the intervening arithmetic between them:
+//
+//	// INVALID: uintptr cannot be stored in variable
+//	// before conversion back to Pointer.
+//	u := uintptr(p)
+//	p = unsafe.Pointer(u + offset)
+//
+// (4) Conversion of a Pointer to a uintptr when calling syscall.Syscall.
+//
+// The Syscall functions in package syscall pass their uintptr arguments directly
+// to the operating system, which then may, depending on the details of the call,
+// reinterpret some of them as pointers.
+// That is, the system call implementation is implicitly converting certain arguments
+// back from uintptr to pointer.
+//
+// If a pointer argument must be converted to uintptr for use as an argument,
+// that conversion must appear in the call expression itself:
+//
+//	syscall.Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(p)), uintptr(n))
+//
+// The compiler handles a Pointer converted to a uintptr in the argument list of
+// a call to a function implemented in assembly by arranging that the referenced
+// allocated object, if any, is retained and not moved until the call completes,
+// even though from the types alone it would appear that the object is no longer
+// needed during the call.
+//
+// For the compiler to recognize this pattern,
+// the conversion must appear in the argument list:
+//
+//	// INVALID: uintptr cannot be stored in variable
+//	// before implicit conversion back to Pointer during system call.
+//	u := uintptr(unsafe.Pointer(p))
+//	syscall.Syscall(SYS_READ, uintptr(fd), u, uintptr(n))
+//
+// (5) Conversion of the result of reflect.Value.Pointer or reflect.Value.UnsafeAddr
+// from uintptr to Pointer.
+//
+// Package reflect's Value methods named Pointer and UnsafeAddr return type uintptr
+// instead of unsafe.Pointer to keep callers from changing the result to an arbitrary
+// type without first importing "unsafe". However, this means that the result is
+// fragile and must be converted to Pointer immediately after making the call,
+// in the same expression:
+//
+//	p := (*int)(unsafe.Pointer(reflect.ValueOf(new(int)).Pointer()))
+//
+// As in the cases above, it is invalid to store the result before the conversion:
+//
+//	// INVALID: uintptr cannot be stored in variable
+//	// before conversion back to Pointer.
+//	u := reflect.ValueOf(new(int)).Pointer()
+//	p := (*int)(unsafe.Pointer(u))
+//
+// (6) Conversion of a reflect.SliceHeader or reflect.StringHeader Data field to or from Pointer.
+//
+// As in the previous case, the reflect data structures SliceHeader and StringHeader
+// declare the field Data as a uintptr to keep callers from changing the result to
+// an arbitrary type without first importing "unsafe". However, this means that
+// SliceHeader and StringHeader are only valid when interpreting the content
+// of an actual slice or string value.
+//
+//	var s string
+//	hdr := (*reflect.StringHeader)(unsafe.Pointer(&s)) // case 1
+//	hdr.Data = uintptr(unsafe.Pointer(p))              // case 6 (this case)
+//	hdr.Len = uintptr(n)
+//
+// In this usage hdr.Data is really an alternate way to refer to the underlying
+// pointer in the slice header, not a uintptr variable itself.
+//
+// In general, reflect.SliceHeader and reflect.StringHeader should be used
+// only as *reflect.SliceHeader and *reflect.StringHeader pointing at actual
+// slices or strings, never as plain structs.
+// A program should not declare or allocate variables of these struct types.
+//
+//	// INVALID: a directly-declared header will not hold Data as a reference.
+//	var hdr reflect.StringHeader
+//	hdr.Data = uintptr(unsafe.Pointer(p))
+//	hdr.Len = uintptr(n)
+//	s := *(*string)(unsafe.Pointer(&hdr)) // p possibly already lost
+//
 type Pointer *ArbitraryType
 
 // Sizeof takes an expression x of any type and returns the size in bytes
@@ -36,7 +183,12 @@ func Sizeof(x ArbitraryType) uintptr
 // number of bytes between the start of the struct and the start of the field.
 func Offsetof(x ArbitraryType) uintptr
 
-// Alignof takes an expression x of any type and returns the alignment
+// Alignof takes an expression x of any type and returns the required alignment
 // of a hypothetical variable v as if v was declared via var v = x.
-// It is the largest value m such that the address of v is zero mod m.
+// It is the largest value m such that the address of v is always zero mod m.
+// It is the same as the value returned by reflect.TypeOf(x).Align().
+// As a special case, if a variable s is of struct type and f is a field
+// within that struct, then Alignof(s.f) will return the required alignment
+// of a field of that type within a struct.  This case is the same as the
+// value returned by reflect.TypeOf(s.f).FieldAlign().
 func Alignof(x ArbitraryType) uintptr
diff --git a/src/vendor/README b/src/vendor/README
new file mode 100644
index 0000000..e540318
--- /dev/null
+++ b/src/vendor/README
@@ -0,0 +1,8 @@
+This file needs to exist because the vendor directory needs
+to exist for some go/build tests to pass, and git can't track
+empty directories.
+
+In Go 1.7 we'll use this directory again. (In Go 1.6 we tried but
+reverted).
+
+See http://golang.org/issue/14047 for details.
diff --git a/test/fixedbugs/issue14006.go b/test/fixedbugs/issue14006.go
new file mode 100644
index 0000000..b56ed73
--- /dev/null
+++ b/test/fixedbugs/issue14006.go
@@ -0,0 +1,64 @@
+// errorcheck
+
+// Copyright 2016 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.
+
+// Literals that happen to resolve to named constants
+// may be used as label names (see issue 13684). Make
+// sure that other literals don't crash the compiler.
+
+package main
+
+const labelname = 1
+
+func main() {
+	goto labelname
+labelname:
+}
+
+func f() {
+	var x int
+	switch x {
+	case 1:
+		2:	// ERROR "unexpected :"
+	case 2:
+	}
+
+	switch x {
+	case 1:
+		2: ;	// ERROR "unexpected :"
+	case 2:
+	}
+
+	var y string
+	switch y {
+	case "foo":
+		"bar":	// ERROR "unexpected :"
+	case "bar":
+	}
+
+	switch y {
+	case "foo":
+		"bar": ;	// ERROR "unexpected :"
+	case "bar":
+	}
+
+	var z bool
+	switch {
+	case z:
+		labelname:	// ERROR "missing statement after label"
+	case false:
+	}
+
+	switch {
+	case z:
+		labelname:
+	}
+
+	switch {
+	case z:
+		labelname: ;
+	case false:
+	}
+}
\ No newline at end of file
diff --git a/test/fixedbugs/issue14010.go b/test/fixedbugs/issue14010.go
new file mode 100644
index 0000000..4fdbf76
--- /dev/null
+++ b/test/fixedbugs/issue14010.go
@@ -0,0 +1,15 @@
+// errorcheck
+
+// Copyright 2016 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.
+
+// Verify that built-in types don't get printed with
+// (empty) package qualification.
+
+package main
+
+func main() {
+	true = false // ERROR "cannot assign to true"
+	byte = 0     // ERROR "not an expression" "cannot assign to byte"
+}
diff --git a/test/live_syscall.go b/test/live_syscall.go
new file mode 100644
index 0000000..c9bf0f2
--- /dev/null
+++ b/test/live_syscall.go
@@ -0,0 +1,28 @@
+// errorcheck -0 -m -live
+
+// +build !windows
+
+// Copyright 2015 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 escape analysis and liveness inferred for syscall.Syscall-like functions.
+
+package p
+
+import (
+	"syscall"
+	"unsafe"
+)
+
+func f(uintptr) // ERROR "f assuming arg#1 is unsafe uintptr"
+
+func g() {
+	var t int
+	f(uintptr(unsafe.Pointer(&t))) // ERROR "live at call to f: autotmp" "g &t does not escape"
+}
+
+func h() {
+	var v int
+	syscall.Syscall(0, 1, uintptr(unsafe.Pointer(&v)), 2) // ERROR "live at call to Syscall: autotmp" "h &v does not escape"
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-golang/golang.git



More information about the pkg-golang-commits mailing list